如何从C++;COM组件转换为C#应用程序 我在C++中创建了一个简单的COM组件,并添加了一个类似的方法: interface IMathControl : IDispatch{ HRESULT AddTwoNumbers( [in] DWORD Number1, [in] DWORD Number2, [out] DWORD *pResult ); };
我已经在我的C#应用程序中使用了上述组件,它工作得很好如何从C++;COM组件转换为C#应用程序 我在C++中创建了一个简单的COM组件,并添加了一个类似的方法: interface IMathControl : IDispatch{ HRESULT AddTwoNumbers( [in] DWORD Number1, [in] DWORD Number2, [out] DWORD *pResult ); };,c#,c++,.net,com,marshalling,C#,C++,.net,Com,Marshalling,我已经在我的C#应用程序中使用了上述组件,它工作得很好 现在,我在C++中定义了一个结构,作为这个 struct AttributeValueInfo { string attribute; string value; string description; }; 我的问题是: 如何定义一个方法,它应该返回我的C++组件中的属性值信息< /代码>类型的结果? 我将如何在我的C#应用程序中使用生成的struct AttributeValueInfo 我想我需要做编组,但不
现在,我在C++中定义了一个结构,作为这个
struct AttributeValueInfo
{
string attribute;
string value;
string description;
};
我的问题是:
如何定义一个方法,它应该返回我的C++组件中的<代码>属性值信息< /代码>类型的结果? 我将如何在我的C#应用程序中使用生成的
struct AttributeValueInfo
我想我需要做编组,但不知道从哪里开始。有人能指出上述场景的步骤或简单代码片段吗
任何帮助都将不胜感激。这是不可能的。只有C++编译器才能生成代码来正确读取STD::string的值。附加的限制是,它是具有完全相同设置和使用完全相同内存分配器的编译器的完全相同版本。标准C++类的互操作能力与石头砖块的性能相比不利。C++没有任何类似于VM保证的C语言,确保了在进程运行的任何代码中保证基本的规则(如对象布局和分配)。 必须使用具有互操作保证的字符串类型。这是COM中的
BSTR
,由CLR直接支持和承担
使用结构也很麻烦,它们的布局严重依赖于编译器设置。结构声明必须出现在您编写的类型库中,CLR将使用IRecordInfo接口安全地访问结构成员。否则,当你意识到一个结构等价于一个只有属性的类时,它就会消失。根据,
AttributeValueInfo
作为返回类型,为什么不在C#应用程序中创建一个名为AttributeValueInfo
的结构,并使用相同的成员?@Brian它可能来自定义COM接口的.idl文件。