C# 如何从C++;并通过COM互操作性来创建.NET类的属性 我有一个用C语言编写的.NET库,我需要从C++访问。库的代码实现如下: 使用系统; 使用System.Runtime.InteropServices; 名称空间MyNameSpace { [ComVisible(true)] 公共接口IClass2 { int DoSomething2(); } [ComVisible(true)] 公共类2:IClass2 { 公共类别2() { } 公共int DoSomething2() { //做点什么 } } } 名称空间MyNameSpace { [ComVisible(true)] 公共接口IClass1 { int DoSomething1(); Class2 class2Obj{get;set;} } [ComVisible(true)] 公共类1:IClass1 { 公共类别1() { } public int DoSomething1() { //做点什么 } 私有类2类2内部对象; 公共类别2类别2obj { 得到 { 返回class2InternalObj; } 设置 { } } } } 现在我的问题是通过C++客户端访问“CuthOffthIn2”方法,在获得对Cyr1的接口后,在“Cult2”中实现。 我使用的C++代码编译时没有问题,如下: //创建接口指针。 IClass1Ptr m_ptrClass1(u uuidof(MyNameSpace::Class1)); int nReturnVal; m_ptrClass1->DoSomething1(&nReturnVal);//这很有效 _类别2*类别2; m_ptrClass1->get_Class2Obj(&class2); IClass2*ptrClass2; class2->QueryInterface(uuuidof(MyNameSpace::IClass2),(void**)和ptrClass2); ptrClass2->DoSomething2(&nReturnVal);//这不起作用,并生成异常0xc00000005

C# 如何从C++;并通过COM互操作性来创建.NET类的属性 我有一个用C语言编写的.NET库,我需要从C++访问。库的代码实现如下: 使用系统; 使用System.Runtime.InteropServices; 名称空间MyNameSpace { [ComVisible(true)] 公共接口IClass2 { int DoSomething2(); } [ComVisible(true)] 公共类2:IClass2 { 公共类别2() { } 公共int DoSomething2() { //做点什么 } } } 名称空间MyNameSpace { [ComVisible(true)] 公共接口IClass1 { int DoSomething1(); Class2 class2Obj{get;set;} } [ComVisible(true)] 公共类1:IClass1 { 公共类别1() { } public int DoSomething1() { //做点什么 } 私有类2类2内部对象; 公共类别2类别2obj { 得到 { 返回class2InternalObj; } 设置 { } } } } 现在我的问题是通过C++客户端访问“CuthOffthIn2”方法,在获得对Cyr1的接口后,在“Cult2”中实现。 我使用的C++代码编译时没有问题,如下: //创建接口指针。 IClass1Ptr m_ptrClass1(u uuidof(MyNameSpace::Class1)); int nReturnVal; m_ptrClass1->DoSomething1(&nReturnVal);//这很有效 _类别2*类别2; m_ptrClass1->get_Class2Obj(&class2); IClass2*ptrClass2; class2->QueryInterface(uuuidof(MyNameSpace::IClass2),(void**)和ptrClass2); ptrClass2->DoSomething2(&nReturnVal);//这不起作用,并生成异常0xc00000005,c#,c++,C#,C++,ptrClass2指针似乎包含一个有效指针,但当调用它的DoSomething2方法时,我得到一个异常:我做错了什么?在这种情况下,是否有其他方法或更好的实践来访问Class2类的方法 提前感谢并致以亲切的问候 Severino如果我是你,我会使用C++/CLI来实现这一点。 请查看以下项目: 感谢您提出的建议,但经过进一步分析,发现问题与COM互操作性的错误使用无关,而是与DoSomething2方法的代码中的错误有关。除了不返回对象的建议之外,我没有看到任何信号,只有接口。粗略的诊断是,您使

ptrClass2指针似乎包含一个有效指针,但当调用它的DoSomething2方法时,我得到一个异常:我做错了什么?在这种情况下,是否有其他方法或更好的实践来访问Class2类的方法

提前感谢并致以亲切的问候


Severino

如果我是你,我会使用C++/CLI来实现这一点。 请查看以下项目:


感谢您提出的建议,但经过进一步分析,发现问题与COM互操作性的错误使用无关,而是与DoSomething2方法的代码中的错误有关。

除了不返回对象的建议之外,我没有看到任何信号,只有接口。粗略的诊断是,您使用的是旧版本的类型库,它没有您在C#代码中所做的更改。