`
coolerbaosi
  • 浏览: 727134 次
文章分类
社区版块
存档分类
最新评论

《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.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics