我已经创建了一个采用双指针(BYTE**)的 COM 方法。在 COM 内部,我正在分配内存并对其进行初始化。
签名是;
HRESULT Canny([in] BSTR szLogoPath, [out] BYTE** pBuffer, [out] USHORT* iBufLen);
问题是当我从 C# 项目调用它时 COM 崩溃,而当我从 WIN32 项目调用它时它工作正常。
此外,在 C# 项目中,上述方法显示为;(BYTE** 显示为 IntPtr)
public virtual void Canny(string szLogoPath,IntPtr pBuffer, out ushort iBufLen);
我的 C# 代码是
LogoFinderClass libCOM = new LogoFinderClass();
unsafe {
byte* buf = null;
IntPtr interopPtr = new IntPtr(&buf);
libCOM.Canny(@"..\Logo.bmp", interopPtr, out bufLen);
}
在 C++ 中,我将内存分配为;
::Canny(BSTR szLogoPath, BYTE** pBuffer, USHORT* iBufLen) {
*pBuffer = new BYTE[1024];
..
}
从 C# 调用时,COM 在分配内存时崩溃。