用VC2008新建一个规则DLL(动态链接到MFC),然后啥也不干,就在其stdafx.h里引用一下boost的thread库:
#include "boost/thread.hpp"
在dll的头文件里导出一个啥也不干的函数:
extern "C" __declspec(dllexport) void DllFunc()
{
}
然后编译此dll项目,生成一个dll和一个lib。
另外新建一个的MFC对话框项目,隐式调用这个dll:
1) 引用dll的头文件
2) 用 #pragma comment(lib, "") 引入编译dll后产生的lib文件
3) 调用DllFunc()函数
调试方式运行,结果在窗口还没出现的时候报告断言错误:
(应该是还在加载该dll的时候就出错了)
void AFXAPI AfxCoreInitModule()
{
ASSERT(AfxGetModuleState() != AfxGetAppModuleState()); // 在这一句发生断言错误
// 查看到AfxGetModuleState()和AfxGetAppModuleState()的返回值都非空,但却是不同的值。
.
.
.
}
boost的版本是1.38.0
有没有人遇到过?为什么会这样呢?
我也碰到过与楼主一样的问题.
boost::thread + MFC DLL 問題
基本上這個問題在boost 1.38就有了,只是沒想到更新成boost 1.45後問題還是沒有解決...
如果是使用MFC开发程序 ,又剛好建立的MFC DLL工程中有使用boost::thread,就會發生compile正常但是一執行程式出現ASSERT。
dllinit.cpp,Line: 587,ASSERT(AfxGetModuleState() != AfxGetAppModuleState());
解決方法就是到boost/libs/thread/src/win32/tss_pe.cpp裡
把底下的程式碼註解掉(即把下面的那句代码注释掉.)
extern BOOL (WINAPI * const _pRawDllMain)(HANDLE, DWORD, LPVOID)=&dll_callback;
再重新compile boost問題就解決了.