1.首先创建MFC应用程序,“应用程序类型”→“基于对话框”,然后选择 完成
2.打开Dialog在空白处右键选择“类向导”→“虚函数”→搜索OnInitDialog()添加过去后→确定OnInitDialog()函数是定义初始化界面后马上执行的默认代码
3.菜单栏上选择“项目”→“类向导”→"添加类"→“类库中的MFC类”→注册表或者文件添加都可以,如果是注册表添加还需要先用大漠插件自带的导入注册表注册一下。
4.把“接口”栏下的“Idmsoft”加入到右边的“生成的类”中,得到大漠默认的类“Cdmsoft”→完成
5.在主文件中 #include "Cdmsoft.h" 导入头文件,同时在下方 Cdmsoft dm;实例化大漠对象。
6.在BOOL ××××::OnInitDialog()放入以下代码:
-------------------
WinExec("regsvr32 E:\3.1232\dm.dll -s",SW_SHOW);//大漠的位置路径你放在哪儿就写哪儿吧,不写也行,写了也不多余
②CoInitialize(NULL); //初始化com库。应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库,大漠是用com标准写成的。
CLSID clsid;
①
HRESULT hr=CLSIDFromProgID(OLESTR("dm.dmsoft"),&clsid);
//①中的参数就是ProgID,通过Clsid在注册表中可以查询得到。
③dm.CreateDispatch(clsid);
多线程调用COM对象时需在每个线程中调用② ③函数来初始化。
-------------------
7.然后可以创建一个按钮来测试是否成功。
dm.MoveTo(400,300);
这里需要说明的是假如创建的Com组件的工程名叫TestCom,在其中添加了一个接口叫MyCom,接口名会自动命名为IMyCom。
编绎成功后,会生成TestCom.dll。注意此时我们生成的Com组件即为:TestCom.IMycom方法。
我们可以看到dm.dll的接口名为“Idmsoft”,那么假如我们现在不知道①处的参数我们要如何确定此处该填什么呢?比如调用一个其他的什么COM插件,此处的参数该如何填呢?上文提到,①处的参数就是ProgID,可以通过注册表查到,我们现在就来试试看。我们搜索"dmsoft"试试。
我们从VC++类向导中得知dm.dll的接口为Idmsoft
打开注册表,Ctrl+F后输入dmsoft搜索。
搜索第一次找到,这里有"CLSID"了,其值也是正确的,但还没见到"ProgID"所以不一定是正确的值。再搜往下搜。
第二次是一些不相关的项这里就不截图了,第三次搜出来了
此表项里有ProgID,和正确的值相同。
我们再来看一个COM组件的dll,依旧先用类向导来查看DLL接口,然后我们打开注册表搜索"KML"。
经过4次搜索后搜到下图
对比开发文档里的接口名: