Enoch007

win32 COM组件编写

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的返回值判断是否成功。

 

posted on 2013-12-03 15:11  Enoch007  阅读(660)  评论(0编辑  收藏  举报

导航