如何将字节数组从CSharp客户端应用程序传递到ATL COM对象

时间:2011-08-05 06:12:04

标签: c# c++ com atl

我想用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 **,但我寻找最佳解决方案。

1 个答案:

答案 0 :(得分:2)

根据this link,您必须将您的函数声明为在IDL中使用SAFEARRAY(byte)

此外,如果您在C ++代码中提取VARIANT,则传递object(在C#端显示为SAFEARRAY)将起作用。