一、创建com组件
1、创建c#类库,
2、设置项目属性。
3、编辑代码,网上找的
using System;
using System.Runtime.InteropServices;
namespace MyComTest
{
// 定义一个接口,使其可见于COM
[ComVisible(true)]
[Guid("4EE1CD3D-AD86-4B54-B487-A09CB53BE519")]// 替换为你的GUID
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] // 双接口模式,支持早期绑定和后期绑定
public interface IMyComTest
{
int Add(int a, int b);
}
// 实现接口的类
[ComVisible(true)]
[Guid("83DBA647-832C-467A-BC59-3F1FD2313277")]// 替换为你的GUID
[ClassInterface(ClassInterfaceType.None)] // 不自动暴露类接口,手动实现和注册接口
public class CMyComTest : IMyComTest
{
public int Add(int a, int b)
{
Console.WriteLine("Hello from MyComponent!");
return a + b;
}
}
}
4、编译后,在运行目录下会生成MyComTest.tlb和MyComTest.dll
二、C++调用COM组件
1、创建c++的控制台应用程序
2、直接在main()上面添加一行
#import ".\..\MyComTest\bin\debug\MyComTest.tlb"
运行编译后,在c++的编译目录下会生成mycomtest.tlh和mycomtest.tli
3、把mycomtest.tlh和mycomtest.tli复制到项目目录
4、#include "Debug\mycomtest.tlh"
5、调用代码
#include <Windows.h>
#include <Ole2.h>
#include <comdef.h>
#include <atlbase.h>
//#include <atlcomcli.h>
//#import ".\..\MyComTest\bin\debug\MyComTest.tlb"
#include "Debug\mycomtest.tlh"
#define TYPE_COM 1
using namespace MyComTest;
int main()
{
HRESULT hr = CoInitialize(NULL);
long sum = 0;
#if TYPE_COM == 1
CComPtr<IMyComTest> pInterface;
hr = pInterface.CoCreateInstance(__uuidof(MyComTest::CMyComTest));
if (SUCCEEDED(hr))
{
sum = pInterface->Add(25, 32);
}
#endif // TYPE_COM == 1
CoUninitialize();
return 0;
}