首页 » 99链接平台 » 64位程序调用32位动态库其一COM组件创建(组件调用创建程序动态)

64位程序调用32位动态库其一COM组件创建(组件调用创建程序动态)

admin 2024-11-22 10:26:58 0

扫一扫用手机浏览

文章目录 [+]

但这些方式难免又要在两个程序上面做大量的二次开发,总觉得不是很理想的解决方式,因此,本人尝试性的研究了一下通过微软的COM组件创建外部可执行程序的方式来实现这一目标,发现这种方式更加简单高效,以下简单介绍一下具体的实验过程。

首先需要了解一下COM组件:COM(组件对象模型)是开发软件组件的一种方法,由以Win 32动态连接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。
可以动态的插入或卸出应用,并向外提供接口供程序调用的能力,由此,正文开始,创建一个简单的windows平台的COM组件

第一步使用VS2015(可以是任意版本,以下以VS2015为例)创建ATL工程

64位程序调用32位动态库其一COM组件创建(组件调用创建程序动态) 99链接平台
(图片来自网络侵删)

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组件也支持远程和分布式调用。
因此,暂时不会被淘汰,其中的相关技术知识点还是值得深入学习的。
#科技萌新成长#

标签:

相关文章