COM 接口 c# 封送数组数组
COM interface c# marshalling array of arrays
我有一个用C++编写的COM服务器,它应该与用C#编写的客户端接口。 C++ COM 服务器将接口函数导出到一个结构,该结构保存一个结构数组,其中包含一个数组
struct InnerStruct { int innerArray[ 100 ]; }
struct OuterStruct { int dummy; InnerStruct outerArray[ 2 ]; }
因此,结构具有固定的大小。
IDL 描述是
HRESULT SetStruct( [in] const OuterStruct* par, [out, retval] int code );
HRESULT GetStruct( [out] OuterStruct* par, [out, retval] int code );
IDL 编译良好,我可以在 C# 客户端中看到结构。
问题是,当我从 C# 客户端调用接口函数时,我只获取/设置外部结构中第一个 InnerStruct 中的值。 第二个内部结构只容纳垃圾。
C# 调试器显示了 OuterStruct 的正确结构,并知道 OuterStruct 中有 2 个 InnerStruct。
在 C# 中,接口函数的声明来自服务器图元文件,因此更改说明并不容易。
我尝试在输入和输出参数上设置size_is((,但 MIDL 编译器不会接受。
我可以在参数上设置一些特定的封送处理,或者如何解决通过COM获取完整的OuterStruct的问题吗?
在我的 IDL 文件中,我试图写入
typedef [transmit_as(OuterStructAliasType)] OuterStruct* HelpType;
并将其他声明保留为
HRESULT SetStruct( [in] const OuterStruct* par, [out, retval] int code );
HRESULT GetStruct( [out] OuterStruct* par, [out, retval] int code );
在我的C++代码中定义了什么
typedef struct OuterStructAliasType
{
char dummy[ sizeof( OuterStruct )];
} OuterStructAliasType;
这似乎有效。 也许还有其他方法可以解决问题。 请告诉我他们更聪明或更好。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- COM 接口 c# 封送数组数组
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C/C++中数组结构和数组结构的通用接口
- 静态声明专用类的接口指针数组
- C 样式数组与 std::库接口的数组
- 将从接口派生的类的实例添加到接口指针数组中
- 无法更改调用接口时的initialize数组
- 如何使用结构体作为接口从函数返回指向数组的指针
- 更快地以数组形式返回数据的c++接口
- 纯虚类(接口)和继承它的对象的内部数组分配
- Marshalas UnManagedType用于接口数组
- 哪个接口将字符串、数组和其他类型复制到相同类型的实例
- 如何在构造函数中创建接口数组
- 将const double[][]数组作为参数传递给double**接口
- hdf5c++接口:编写动态二维数组
- 当编组接口数组从.net到c++时抛出ExecutionEngineException
- C++策略设计模式,制作一个接口数组