win32的com组件:
1. 编辑idl,idl文件会生成对应的com class和com interface,例如
[
object,
uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),
dual,
nonextensible,
pointer_default(unique)
]
interface Iface : IDispatch
{
[id(1)] HRESULT SetChange(DWORD arg);
};
[
uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
]
coclass testClass
{
[default] interface Iface;
};
2.编辑.man文件,.man文件中会包含很多注册表相关信息,将新加入的类的注册信息写入.man文件中,COM组件在运行时,需要根据注册表中类ID找到类。
HKEY_CLASSES_ROOT\CLSID\xxxxx
HKEY_CLASSES_ROOT\Interface\xxxxx
3.编辑.rgs文件,将注册信息写入.rgs文件,以便生成注册信息。
4.编辑resource.h文件,将新加入的资源写入resource.h中,如#define IDR_TESTCLASS 112
4.编辑.rc文件,加入对应的注册表信息,如:IDR_TESTCLASS REGISTRY "TestClass.rgs"
5.编辑testClass.h和testClass.cpp文件,实现接口和类。
6.进行编译,会生成一个xxx.h文件和xxx_i.c文件,xxx.h和xxx_i.h文件包含了新的idl文件生成的类和接口的声明,给其他使用这个dll或者exe的类使用。
7.手动编辑注册表文件导入到target machine,运行程序,即可。
8.测试:
CComPtr<Iface> pComFace;
hr = CoCreateInstance(CLSID_testClass, nullptr, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pComFace));
根据hr的返回值判断是否成功。