最近公司的新产品需要在网页中使用,需要改进软件的操作模式.由于在网页中操作硬件设备,对我来说是没有接触的领域,所以在这段时间内主要进行了这方面的搜集.
首先是查找对硬件的访问,发现在CSDN上有很多的高手,一致的推荐Activex和COM组件的方式.后来发现,这两种方式的更多用途是在不同语言之间的模块化,当然我现在是不怎么使用拉,在后来进行JAVA语言调用C++的DLL的时候还用到了JNI的技术,后来分析一下,实际上就是一个连接库的调用,只不过对端口的使用进行了定义,包括标准话的内存地址等等.
好了,确定使用Actinex,接下来就开始"蛮干".我直接使用MFC的Activex 的方式,按照步骤进行了一个简单的activex 的制作.:
MFC Activex Control Wizard 作为引导,实际上就是象产生对话框一样的简单,只不过中间的某些步骤需要必要的人工干预,比如是 自定义函数名称 参数类型和个数 以及输出类型(返回值)等等. 这样的结果就是,当产生一个activex之后,它的入口就确定了,能不能再修改呢? 这是一个问题.
起个名字叫:Client_page,于是产生的工作区里面就存在了这样的文件:
Client_page.cpp:里面有InitInstance,哦,是初始化了,还有两个比较重要的函数,STDAPI DllRegisterServer(void),STDAPI DllUnregisterServer(void),就是传说中的注册函数和注销函数了.一般的时候我没有修改它们,不敢啊.而且看了代码,函数里面并没有实现的方法,属性或者事件,就更不用关心了.
Client_page.def:发现它象DLL的接口一样,定义了标准的接口函数,但是也没有我所定义的函数接口,看来也是标准了,不修改.
Client_page.odl:一大驼的数字,象UID一样,一查,就是传说中万中无一从来不会重复的CLSID,在程序里面是UUID,好了,里面有三个,我该使用那一个呢? 看看说法,
// Primary dispatch interface for CClient_pageCtrl :应该是主通信接口
// Event dispatch interface for CClient_pageCtrl : 事件接口
// Class information for CClient_pageCtrl :本控件类的信息,就是类ID了,难道是它,接下来在网页中使用了,果然就是它OK
Client_pageCtl.cpp:
终于看到自家人了,我的通信函数接口就在这里,而且已经写好了,哇哈哈.我写,我写.我写写...慢着,要先实验一下. 于是先创建一个简单的网页,在网页里面添加一些使用代码:
<object classid="clsid:40AE0DC8-D84C-4C75-AC8C-B9FDDC7F1E00"
codebase="Client_page.ocx#version=1,0,0,1"
id = Client_page
align=center>
</object>
运行之后,果然啊,弹出我的对话框,OK.写吧,代码是最简单和枯燥的事情了.
Client_pagePpg.cpp:看到DoDataExchange,恩 和对话框一样,应该没有我的事情了.
结果呢,顺利的进行了与硬件打交道的通信.
总结: 其实使用MFC的方式很简单,按照步骤来就型了,关键是了解这个机制,在完成ACTIVEX之后,就开始查讯:ActiveX 在广义上是指微软公司的整个COM架构,但是现在通常用来称呼基于标准COM接口来实现对象连接与嵌入的ActiveX控件。后者是指从VBX发展而来的,面向微软的Internet Explorer技术而设计的以OCX为扩展名的OLE控件.看来我的就是OLE拉.
Internet Explorer和一些其他应用程序同时支持ActiveX Documents接口规范,允许在一个应用程序中嵌入另一个支持这个规范的应用程序。很多应用软件,例如微软的Microsoft Office系列和Adobe的Acrobat Reader都实现了这个规范。