我想用 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**,但我正在寻找最佳解决方案。
最佳答案
根据 this link ,您必须在 IDL 中声明您的函数采用 SAFEARRAY(byte)
。
此外,如果您在 C++ 中提取 SAFEARRAY
,传递一个 VARIANT
(在 C# 端显示为 object
)将起作用代码。
关于c# - 如何将字节数组从 CSharp 客户端应用程序传递到 ATL COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6952157/