综述: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 在同一个模块中。