在C+中使用C#NET COM组件+;
我注意到有人问一个关于如何使用C++中的C#COM组件的问题 但该线程被标记为重复,因为问题的标题太通用,并且没有指定C在C+中使用C#NET COM组件+;,c#,c++,.net,com,C#,C++,.net,Com,我注意到有人问一个关于如何使用C++中的C#COM组件的问题 但该线程被标记为重复,因为问题的标题太通用,并且没有指定C 由于我无法回答这个问题,我正在创建一个新的问题,我将回答这个问题,其他人也可以提出这些建议 在.NET中引用C++ COM组件是容易的;我们所要做的就是 寄存器(regsvr32) 在Visual Studio解决方案中添加对COM dll的引用 将在.NET项目的bin目录中创建一个互操作文件,我们已经完成了 但反过来就不像上面那么简单了。 这次我提出了一些步骤,我们需
由于我无法回答这个问题,我正在创建一个新的问题,我将回答这个问题,其他人也可以提出这些建议
在.NET中引用C++ COM组件是容易的;我们所要做的就是
- 寄存器(regsvr32)
- 在Visual Studio解决方案中添加对COM dll的引用
- 将在.NET项目的bin目录中创建一个互操作文件,我们已经完成了
这次我提出了一些步骤,我们需要遵循C++代码中的COM可见.NET DLL。p>
- 向regasm注册COM Visible.NET组件,如下所示:
regasm/tlb
例如regasm "C:\SampleProject\bin\Release\Atreya.Anugrah.ComVisibleComponent.dll" /tlb
#import "C:\SampleProject\bin\Release\Atreya.Anugrah.ComVisibleComponent.tlb" named_guids raw_interfaces_only
Atreya_Anugrah_ComVisibleComponent::IMyInterface* m_pIMyInterface;
- 在.h文件中按如下方式引用.NET组件:
#仅导入“”命名的\u guids原始\u接口\u
例如#import "C:\SampleProject\bin\Release\Atreya.Anugrah.ComVisibleComponent.tlb" named_guids raw_interfaces_only
Atreya_Anugrah_ComVisibleComponent::IMyInterface* m_pIMyInterface;
- 在.h文件中创建一个类,并像这样声明成员变量:
ComVisibleComponent::*memberVariablePointer<例如#import "C:\SampleProject\bin\Release\Atreya.Anugrah.ComVisibleComponent.tlb" named_guids raw_interfaces_only
Atreya_Anugrah_ComVisibleComponent::IMyInterface* m_pIMyInterface;
- 现在,在.cpp文件中初始化声明的成员变量指针,如下所示:
hr = CoCreateInstance( __uuidof(Atreya_Anugrah_ComVisibleComponent::<Name_of_CoClass_Implementing_Interface>), // COM class id NULL, // Outer unknown CLSCTX_ALL, // Server INFO Atreya_Anugrah_ComVisibleComponent::IID_<Name_of_Interface>, // interface id (void**) &m_pIMyInterface); // Returned Interface if (FAILED(hr)) { _com_error e(hr); strErrorMsg.Format("Error: Unable to create COM Visible .NET component. hr = %d. Message = %s",hr, e.ErrorMessage()); return hr; } //you are good to use your initialized pointer here :) m_pIMyInterface->foo()
hr=CoCreateInstance( __uuidof(Atreya_Anugrah_ComVisibleComponent::),//COM类id NULL,//外部未知 CLSCTX_ALL,//服务器信息 Atreya_Anugrah_ComVisibleComponent::IID///接口id (无效**)和m_pIMyInterface);//返回接口 如果(失败(小时)) { _通信错误e(hr); strErrorMsg.Format(“错误:无法创建COM可见.NET组件。hr=%d.Message=%s”,hr,e.ErrorMessage()); 返回人力资源; } //您可以在此处使用初始化的指针:) m_pIMyInterface->foo()
纳马斯特!(问候)
Anugrah Atreya可能重复:该线程(Rowland Shaw认为是重复的)是从另一个C#COM组件调用C#COM组件,以测试其是否为有效的COM组件。我的线程是关于从C++代码中消费C.y..net com组件的。在这种情况下,它与Rowland Shaw是完全相同的,你现在是正确的,并且我已经在我的问题的描述中提到了与“ReFF”相同的URL。我之所以在这里回答是因为没有可编辑的框来放置答案。这也是我在我的原始问题中提到的。当某些内容作为副本关闭时,您可以将您的答案添加到原始问题,在这种情况下,我同意这是重复的,管理员可以删除,如果可能的话。