如何将我的类的数组从vc ++函数返回到C#?

时间:2015-11-11 11:29:08

标签: c# arrays visual-c++ com idl

如何从IDL Dll(C ++项目)创建和返回MyClass对象数组? Dll将用于C#项目。

//--- in idl file
[id(8)] HRESULT GetTest([out,retval] SAFEARRAY(IMYClass*)* arr_data)

//--- in .h file
STDMETHOD(GetTest)(SAFEARRAY * arr_data);

//--- in .cpp file
STDMETHODIMP CIMY_Interface::GetTest(SAFEARRAY * arr_data)
{
// Code ????
}

我的问题是应该在GetTest函数

中编写的代码

1 个答案:

答案 0 :(得分:0)

COM允许您来回发送编组数据类型。这些是主要的核心数据类型,如整数,宽字符串,布尔等,其他COM对象,如果您愿意,您可以为自己的对象或数组编写编组代码。

你想做什么,例如。通过COM传递一个自己的对象数组并不可行。这里有很多选项

  1. 将数组的字符串表示形式传递为JSON字符串,可以对其进行编码和解码。
  2. 使用项目get和set方法以及计数等将数组包装在COM对象中。这样,您的函数可以返回COM对象,然后按要求返回项目。但这对于作为数组使用来说会很慢。
  3. 实施为VariantArray