zip's

while(true) { Write it down; Think about it; Refine it; Sleep(); }

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

综述:http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx

- 通常情况下,使用 regular dll 就好,函数传参使用 STL ,如 std::string ,而不是 CString

- regular dll 中的每一个导出函数都需要 AFX_MANAGE_STATE(AfxGetStaticModuleState())

- 如果包含从MFC类派生的类,那么要使用 MFC extend dll

-

 

.def 文件:http://msdn.microsoft.com/en-us/library/28d6s79h.aspx

- 这个文件不是必须的,目的是定义该DLL的导出内容,使用 _declspec(dllexport) 也可以

 

和DLL相关的麻烦:

问题:发现内存泄漏 -> 从CWinThread派生的类没有调用析构函数 ->问什么没有调用析构函数?

原因:创建这个thread的代码在 A.dll 的函数 AFoo() 中,调用AfxBeginThread(). 这个线程派生类代码在B.dll中,工作函数是 BThreadProc()。退出线程的方法是在,BThreadProc()中调用 AfxEndThread(0)。AFoo() 和 BThreadProc() 这2个函数都加上了 AFX_MANAGE_STATE(AfxGetStaticModuleState())。我想,析构函数之所以没能调用就是 BeginThread 和 EndThread 时的 module state 没有匹配。较好的方法去避免这个问题,就是 begin 和 end 在同一个模块中。

posted on 2010-06-01 16:33  zip's  阅读(409)  评论(0编辑  收藏  举报