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"试试。

有没有人用Java实现了大漠插件自定义字库 大漠自定义类库_初始化

我们从VC++类向导中得知dm.dll的接口为Idmsoft

打开注册表,Ctrl+F后输入dmsoft搜索。

有没有人用Java实现了大漠插件自定义字库 大漠自定义类库_初始化_02

搜索第一次找到,这里有"CLSID"了,其值也是正确的,但还没见到"ProgID"所以不一定是正确的值。再搜往下搜。

第二次是一些不相关的项这里就不截图了,第三次搜出来了

有没有人用Java实现了大漠插件自定义字库 大漠自定义类库_初始化_03

此表项里有ProgID,和正确的值相同。

 

我们再来看一个COM组件的dll,依旧先用类向导来查看DLL接口,然后我们打开注册表搜索"KML"。

有没有人用Java实现了大漠插件自定义字库 大漠自定义类库_搜索_04

经过4次搜索后搜到下图

有没有人用Java实现了大漠插件自定义字库 大漠自定义类库_初始化_05

对比开发文档里的接口名:

有没有人用Java实现了大漠插件自定义字库 大漠自定义类库_搜索_06