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

标签 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**,但我正在寻找最佳解决方案。

最佳答案

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

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

关于c# - 如何将字节数组从 CSharp 客户端应用程序传递到 ATL COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6952157/

相关文章:

c# - 用 C# 给矩阵的颜色单元格

c# - 如何从 XElement 创建的节点中删除空的 xmlns 属性

c# - 使用 http 触发的函数将输入绑定(bind)到表存储

c++ - any 类中的模板构造函数与非模板构造函数

c++ - 添加复数时出错

c# - 将反射与 COM Interop 结合使用

c# - 为 C# COM 服务器创建 C++ COM 客户端

c# - 如何将类作为可选参数传递给方法?

c++ - win32 GDI C++ 中垂直文本不会加粗

com - IDA Pro 中是否可以将结构体字段偏移到 .data 段中定义的 vtable?