《COM技术内幕》读书笔记——第5章 动态连接


      前置课程是PE文件结构和DLL动态连接技术,如果你不了解PE文件结构(这在这章不算很重要,但这个是很基本很基本的内容,对理解编译加载原理以及内存结构有很大帮助),请参考PE文件格式官方文档;如果你还没有写过DLL,请先参考《Windows核心编程》第19,20章。

      回归正题目,这里要做的是一个COM的组件服务器——使用DLL的形式,所以有别于一般的DLL。需要实现注册,卸载,初始化,创建对象,判断状态这几个函数,列表如下:

CMPAPI int APIENTRY DllMain(HINSTANCE hModule,DWORD dwReason,LPVOID lpReserved);
CMPAPI STDAPI DllCanUnloadNow();
CMPAPI STDAPI DllGetClassObject(const CLSID& clsid,const IID& iid,void** ppv);
CMPAPI STDAPI DllRegisterServer(void);
CMPAPI STDAPI DllUnregisterServer();

 注:上面的CMPAPI是我的工程编译头,可以不关注。

导出函数表为:

; CMPNT.def : Declares the module parameters for the DLL.

LIBRARY      "CMPNT"

EXPORTS
    ; Explicit exports can go here
	DllCanUnloadNow @1 PRIVATE
	DllGetClassObject @2 PRIVATE
	DllRegisterServer @3 PRIVATE
	DllUnregisterServer @4 PRIVATE

这部分内容根据书上本章内容的代码整理调试成功后测试通过,附于我的资源里,环境是win7,vs2008sp1。

方法,先编译CMPNT工程,在运行里使用regsvr32.exe dllfullpath来注册,这个注册过程是需要跟踪理解的,我在里面打了不少messagebox,在执行regsvr32命令的时候,弹出第一个窗口的时候把regsvr32进程附加到调试中,就可以清楚的看出注册的过程,调用上面这些函数的先后顺序。对于加深COM的注册原理有重要帮助。对于messagebox,熟悉以后可以根据自己的需要删除少一点。

接下来编译MyChap工程,就可以运用调试过程来观察整个COM的运行过程,我在这个过程学到很多COM的内部原理。

下载连接:http://u.download.csdn.net/upload/success

Any questions, pls contact me.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值