您的位置:首页 > 其它

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

2012-12-28 15:33 204 查看
      前置课程是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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: