如何从c++ COM组件返回和使用自定义结构对象到c#应用程序
How to Return and consume custom struct object from C++ COM component into C# application
我在c++中创建了一个简单的COM组件,并添加了一个这样的方法
interface IMathControl : IDispatch{
HRESULT AddTwoNumbers(
[in] DWORD Number1,
[in] DWORD Number2,
[out] DWORD *pResult
);
};
我已经在我的c#应用程序中使用了上述组件,它工作得很好。
现在,c++中定义了一个结构体
struct AttributeValueInfo
{
string attribute;
string value;
string description;
};
我的问题是:
如何在我的c++ COM组件中定义一个应该返回AttributeValueInfo
类型结果的方法?
我将如何在c#应用程序中使用生成的struct AttributeValueInfo
?
我想我需要做封送,但不知道从哪里开始。谁能指出上述场景的步骤或简单的代码片段?
不可能。只有c++编译器才能生成代码来正确读取std::string的值。附加的限制是,它是具有exact相同设置并使用exact相同内存分配器的exact相同版本的编译器。标准c++类的互操作能力与砖石的互操作能力相比是不利的。c++没有任何类似于c#的VM保证,确保像对象布局和分配这样的基本规则对进程中运行的任何代码都是有保证的。
必须使用具有互操作保证的字符串类型。这是COM中的BSTR
,由CLR直接支持和假设。
使用结构体也是相当麻烦的,它们的布局严重依赖于编译器的设置。结构的声明必须出现在您编写的类型库中,CLR将使用IRecordInfo接口安全地访问结构成员。否则,当你意识到一个结构相当于一个只有属性的类时,这种限制就消失了。
相关文章:
- 通过 NIF 从C++返回自定义数据结构
- C++ 通过函数传递自定义结构
- 在C++中循环访问自定义结构列表的小问题
- 自定义数据结构的优点是什么?
- 如何在Qt中使用QDataStream将自定义结构保存/加载到二进制文件中?
- 为什么在类或结构中传递自定义比较器函数?
- 如何在自定义 LLVM 传递之间正确传递数据结构
- 结构向量中自定义结构函数的内存使用
- 类型转换自定义结构
- 使用结构绑定更改自定义结构的值
- 信号槽自定义结构问题
- 如何将unordered_set与自定义结构一起使用?
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- 通过自定义结构和链接列表类中的C 中的哈希表
- 从自定义结构数组中提取数据
- 将 OpenGL VBO 与自定义类/数据结构一起使用
- 无法使用自定义结构的属性
- 通过引用将自定义结构的向量传递给 boost::compute 闭包或函数
- 自定义链表创建 RtlValidateHeap 错误,其结构具有链表
- 如何为C++类和结构自定义 STAssertEquals 输出