C语言使用ActiveX控件

ActiveX使用的头文件,是只有C++才能用的,C语言要使用ActiveX控件,也是件很容易的事。 微软标准的ActiveX控件,根本上它还是一个窗口(Window),通俗地说就是关联了一个或多个COM对象窗口。这个窗口当然可以通过CreateWindowEx函数创建。 大家都知道,CreateWindowEx要指定一个类名和窗口名,类名是通过RegisterClassEx注册的窗口类的类名,而窗口名则视情况,对于APPWINDOW类型的窗口来讲,窗口名就是窗口标题。很幸运的事,运行ActiveX控件的窗口的窗口类(也可以说是ActiveX控件宿主窗口),微软已经帮我们实现,只要调用ATL库(atl.dll)里的初始化函数AtlAxWinInit,即可实现注册,类名为”AtlAxWin”。类名有了,在CreateWindowEx的时候还要指定窗口名为ActiveX控件的CLSID,即可成功创建ActiveX宿主窗口。 要获得窗口里的COM对象,通过ATL库里函数AtlAxGetControl即可获得。其它的工作就是操作COM对象的工作了。 建议在C语言里用LoadLibrary加载atl.dll,然后再使用里面的这两个函数。 写了一个实现的代码段:

C语言访问Windows COM组件函数

COM(Component Object Model)是Windows里常用的组件对象模型,在Windows上是可以上升到操作系统级别,甚至到网络分布式级别的面象对象技术,也就是按照微软定义的标准实现的COM组件,不仅可以在本地Windows操作系统上让其它程序调用,而且可以供网络内的其它系统调用(DCOM)。 OLE是对象连接/嵌入技术,它其实就是COM,只是在COM的标准上主要增加了自动化功能,OLE大家最熟悉的应用就是在窗口程序上嵌入IE内核(WebBrowser类),然后程序通过WebBrowser提供的接口与里面的网页交互,然后就有了我们的遨游,360浏览器等等。而且OLE是脚本语言最重要的精神支持者之一 另外要指出的是COM是一种对象建模模型,任何人都可以使用这种模型为自己的项目建模,像腾讯的QQ软件,整个窗口上就嵌了一个OLE对象,但他们却又没有完全按照标准去写的,你无法拿到这个对象的包含的其它对象、属性和方法,这也是肯定的,要随便让人拿到那QQ软件就随便被其它程序控制了。 本文是以讲Windows上C语言访问COM为主的文章,并不打算讨论COM的实现细节,如果要了解COM的技术细节,可以参考微软的MSDN。文章后面附有我以前用汇编写的COM调用函数,我现在基本上不写汇编了,发上来是希望它能对汇编的学习人员提供帮助。 本文链接: http://www.hoverlees.com/blog/?p=746