我想用csharp编写一个应用程序,它读取文件的内容并将其传递给ATL COM对象。
我的IDL有问题。我在ATL-COM对象上定义了一个名为“Decode”的方法,如下所示:
[id(101), helpstring("Decode")] HRESULT Decode([in] BYTE* pBuff, [in] INT nLen, [out, retval] INT* pnRetVal);
但是,当我编译自己的COM dll并想在CSharp应用程序中使用它时,我找到了带有此签名的方法:
int MyClass.Decode(ref byte pBuff, int nLen);
但是,我除了有这样的方法:
int MyClass.Decode(byte[] pBuff, int nLen);
你有什么建议吗?我也尝试了不同类型,如VARIANT *或BYTE **,但我寻找最佳解决方案。
答案 0 :(得分:2)
根据this link,您必须将您的函数声明为在IDL中使用SAFEARRAY(byte)
。
此外,如果您在C ++代码中提取VARIANT
,则传递object
(在C#端显示为SAFEARRAY
)将起作用。