但这些方式难免又要在两个程序上面做大量的二次开发,总觉得不是很理想的解决方式,因此,本人尝试性的研究了一下通过微软的COM组件创建外部可执行程序的方式来实现这一目标,发现这种方式更加简单高效,以下简单介绍一下具体的实验过程。
首先需要了解一下COM组件:COM(组件对象模型)是开发软件组件的一种方法,由以Win 32动态连接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。可以动态的插入或卸出应用,并向外提供接口供程序调用的能力,由此,正文开始,创建一个简单的windows平台的COM组件
第一步使用VS2015(可以是任意版本,以下以VS2015为例)创建ATL工程

ATL工程创建
ATL向导中选择可执行文件。也可以选择服务EXE(经本人测试,服务EXE在客户端调用后不能接收回调事件,可能是未选择连接点导致)
ATL工程创建
创建工程完成后,给工程中添加一个ATL简单对象类,命名为TestClass
简单对象创建
下一步至如下页面
简单对象创建
线程模型默认选择单元,如果计划在COM组件回调函数到达时通知当前程序需要选择连接点,也可创建完类后再在文件中手动添加(COM里面的连接点就好像是C语言的回调函数,只不过它是基于面向对象实现的。连接点的作用也就是COM对象将一些事件通知给调用者)
完成后切换到类视图,右键ITestClass类添加方法,添加向外提供的接口名称及参数,其中[in]表示输入参数,[out]表示输出参数。例如下面例子,创建了一个Init方法
添加方法及定义参数
最后切换至工程目录,在Init方法下添加需要在COM中实现的功能,可以直接调用32为dll中的相关接口方法。
添加接口实现的功能
完成后选择x86平台进行编译,如果不出意外将在指定目录下生成ATLTest.exe文件。
至此,一个简单的COM 组件就编写完成了。接下来我们需要做的是将此COM组件注册进系统,并在64位的程序调用这个组件,以达到调用32位动态库的目的。
注册COM组件需要管理员权限,以管理员权限打开命令行窗口,进入到ATLTest.exe文件所在目录下然后执行
ATLTest.exe /regserver
即可将COM组件注册进系统服务,此时此组件就可被其他程序检测并使用了。由于篇幅过长,本次就暂时介绍到这里,关于客户端程序对COM组件的调用将在下篇文章中继续介绍,由于本人也是探索性的学习,文章中难免会出现错误和不足的地方,有问题还请大家不吝指教。
以上就是本人对Windows平台COM组件开发的一些实践,在学习过程中也看到部分同学认为COM组件太老旧,已经被淘汰,但就目前个人认识来看,COM组件也是一种比较好的软件模块化的方式,并且COM组件都是按照COM规范实现,一次编译后生成二进制文件,在windows和linux下可直接使用,不需要重新编译。另外COM组件也支持远程和分布式调用。因此,暂时不会被淘汰,其中的相关技术知识点还是值得深入学习的。#科技萌新成长#