拼吾爱程序人生.Net编程Visual Studio.NET COM组件开发实践(四)---From C++ to COM :Part 1

1  /  1  页   1 跳转 查看:269

COM组件开发实践(四)---From C++ to COM :Part 1

COM组件开发实践(四)---From C++ to COM :Part 1

一,C++客户重用C++对象

      假设已经有一个可以重用的类,我们就可以在自己的程序中去重用它,只需要将其定义和实现文件加入到我们自己的工程中,并且在使用它的文件中包含此类的定义文件就可以了,这也是我们最常用的C++标准重用方法。就拿我自己来说,在CodeProject上遇到比较好的控件代码,都是这样直接用到自己的项目中来的。

      下面就给出我这个系列的第一个代码示例,在接下来的几篇文章中,将基于此代码不断进行改进,一步步从C++走向COM.

      简单介绍下我们要重用的C++对象,它是一个简单的类似数据库的对象,用来管理内存中的数据,它包含一个指向“数据库”中所有表的指针数组,表实际是一个字符串数组,每个数组元素表示表格的一行。另外这个类还包含有一个数据表表名的数组。

DBSRV.h文件:

Code


DBSRV.cpp文件:

Code


客户程序是一个简单的MFC单文档程序,为程序添加三个菜单项“建表”,“写表”,“读表”,对应的处理函数在CDBDoc中实现。

Code


最后在CDBView的OnDraw函数中添加如下语句来显示读表读取到的内容:

Code


(文/phinecos  出处/博客园)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Visual Studio.NET] 的这些文章也感兴趣:

微软为“离线”做好准备:推出同步框架
Promesh.NET:一个.NET的MVC Web框架
体验.net 2.0 的优雅 -- 异步WebService调用
Castle在“新.NET时代”将何去何从
在 GridView 中增加记录的方法
深入.NET DataTable
C#中对POP3邮件解码
Windbg入门:如何使用Windbg调试得到ArrayList的值
ListView和CSS Friendly
分布式缓存解决方案
 

回复:COM组件开发实践(四)---From C++ to COM :Part 1

二,将C++对象打包到DLL中

      第一节中的标准重用方法有一个大毛病:类的实现代码被泄露了,而这想必不是我们想要的结果。要解决这个问题,我们可以使用DLL将类的代码打包成一个DLL,并提供一个用于说明函数和结构的头文件,这样实现代码就封装起来了。基于上一节的代码,我们修改如下:

一)先修改接口文件:1)为每个成员函数添加_declspec(dllexport)声明;2)为CDB类添加成员函数Release(),用于在对象不再被使用时删除自己;3)声明类工厂CDBSrvFactory;4)声明返回类工厂对象的引出函数DllGetClassFactoryObject,用于创建对应的类工厂

Code


二)修改对象程序。在上一节中,重用的对象是以DBSRV.h和DBSRV.cpp这两个文件形式存在的。这一次我们要将其封装为一个DLL供客户程序调用。
新建一个Win32 DLL项目,在其中加入两个cpp文件,一个用于实现CDB类,代码如下

Code


在另一个DBSrvFact.cpp文件中实现类工厂:

Code


编译后生成引入库文件(.LIB)和动态链接库文件(.DLL)。

    三)修改客户程序

      1)由于前面我们已经为CDB类添加了删除自己的函数Release(),因此在CDBDoc的析构函数中修改我们使用的CDB对象的删除方式如下:

Code


2)创建CDB类对象的方式改变了,我们通过对应的类工厂对象来创建CDB对象,而不再是直接地new一个CDB对象出来了。

Code


3)将传入/传出DLL中的参数标准化为Unicode编码。若不是以Unicode方式编译(##ifndef UNICODE),则使用MultiByteToWideChar将输出参数由ASCII转换为Unicode,用WideCharToMultiByte将输入参数由Unicode转换为ASCII。

Code


4)连接DLL,创建客户程序。现在我们使用DLL,因此不再需要被重用对象的源代码,那么先将DBsrv.cpp和DBsrv.h两个文件从工程中删除。与DLL连接的方式采用隐式链接:在”链接器à输入à附加依赖项“中输入:.."object"Debug"db.lib。最后将DB.dll拷贝到客户程序目录下,运行客户程序。


源码下载:
 附件: 您所在的用户组无法下载或查看附件
 
1  /  1  页   1 跳转

快速回复帖子

标题
禁用 URL 识别
禁用表情
禁用 Discuz!NT 代码
使用个人签名
  [完成后可按 Ctrl+Enter 无刷新发布]  

版权所有 拼吾爱程序人生    

Powered by Discuz!NT 2.1.202   Copyright © 2001-2008 Comsenz Inc. 鄂ICP备07500843号
返顶部