【发布时间】:2010-05-19 17:01:54
【问题描述】:
我使用 3rd 方 COM 在图片中查找面孔。其中一种方法具有以下签名,来自 SDK:
long FindMultipleFaces(
IUnknown* pIDibImage,
VARIANTARG* FacePositionArray
);
参数:pIDibImage[in] - 图片 搜索。
FacePositionArray[out]- 的数组 FacePosition2 对象进入哪个面 信息被放置。这个数组是 在类型的安全数组(VARIANT)中 VT_未知。数组的大小 规定最大面数 要搜索的内容。
转换为以下 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 不是结构体。哎哟。