我使用第三方COM来查找图片中的人脸。其中一种方法具有以下特征,从SDK:将C#中的SAFEARRAY传递给COM
long FindMultipleFaces(
IUnknown* pIDibImage,
VARIANTARG* FacePositionArray
);
参数:pIDibImage [中] - 图像 进行搜索。
FacePositionArray [out] - FacePosition2数组,面孔 信息被放置在其中。这个数组是 ,其类型为 VT_UNKNOWN的安全数组(VARIANT)。数组 的大小规定了要搜索的面的最大数量 。
换算成下面的C#方法签名(从元数据):
int FindMultipleFaces(object pIDibImage, ref object pIFacePositions);
被人看好我叫它以下方式,但得到一个异常的内存已损坏。只有在图像中存在人脸时才抛出异常。
FacePosition2[] facePositions = new FacePosition2[10];
object positions = facePositions;
int faceCount = FaceLocator.FindMultipleFaces(dibImage, ref positions);
什么是将SAFEARRAY传递给非托管代码的正确方法?
发现问题的原因:所述阵列必须手动初始化,因为FacePosition2不是一个结构。哎哟。 – SlavaGu 2010-05-19 08:53:42