我有一个用VC ++开发的应用程序,它使用第三方dll,它也是用VC ++开发的 它工作正常,当使用依赖walker检查时,应用程序和DLL依赖于MFC42.dll,MSVCRT.dll,MSVCP60.dll等。
现在应用程序已移植到VS2008,并且调用dll的代码没有变化。 调用DLL函数后,正常功能正常工作
但是在尝试使用Dialog调用函数时,比如
MyFunc(void)
{
handle = AfxGetResourceHandle();
AfxSetResourceHandle(::GetModuleHandle(mydll));
if( myCDialog.DoModal() == IDOK )
{
/* My Functionality */
}
AfxSetResourceHandle(handle);
}
尝试执行DoModal时,MFC42.dll(c0000005)中存在访问冲突错误。
exe代码很好,因为它可以与VS2008及更高版本的dll完美配合。
答案 0 :(得分:2)
当您将应用程序移植到VC-2008时,不应再依赖于MFC42.DLL。这是VC 6.0中的MFC DLL。
也许您的codenow使用VC-2008 MFC,但您的库使用VC 6.0中的MFC。 如果两者(库和您的代码)共享MFC代码,则无法使用。
PS:切换开发环境时,请确保所有第三方库也支持此环境。可能是你需要一个新的lib文件。或者,如果您有源代码,则需要重建lib。
答案 1 :(得分:0)
我认为您需要使用AFX_MANAGE_STATE(AfxGetStaticModuleState())
来启用MFC框架来正确处理资源。
extern "C" void WINAPI MyFunc(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if( myCDialog.DoModal() == IDOK )
{
/* My Functionality */
}
}