调用DLL时,报警如下:
Debug Assertion Failed!
Program: C:\Program Files (x86)\Mozilla Firefox\plugin-container.exeFile: f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\objcore.cpp
Line: 40
objcore.cpp为微软工程路径,检查VS安装路径下的同名文件,40行内容为this!=NULL,查阅相关资料得知该问题由AfxGetApp为空引起
BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
{
ENSURE(this != NULL);
// it better be in valid memory, at least for CObject size
ASSERT(AfxIsValidAddress(this, sizeof(CObject)));
// simple SI case
CRuntimeClass* pClassThis = GetRuntimeClass();
ENSURE(pClassThis);
return pClassThis->IsDerivedFrom(pClass);
}
解决办法是在DLL类中新建一个CWinApp* m_app成员,并初始化如下:
m_app = new CWinApp((LPCTSTR)"app");
m_app->m_hInstance=hdll;
m_app->InitInstance();
m_app->InitApplication();
AfxWinInit(hdll, NULL, ::GetCommandLine(), 0);