Visual c++ VC和x2B移植中的问题+;VS2008的应用程序
我有一个用VC++开发的应用程序,它使用第三方dll,也用VC开发++ 它工作正常,当使用dependency walker进行检查时,应用程序和dll依赖于MFC42.dll、MSVCRT.dll、MSVCP60.dll等 应用程序现在被移植到VS2008,调用dll的代码没有任何更改。 调用DLL函数后,正常功能可以正常工作 但在尝试使用对话框调用函数时,如Visual c++ VC和x2B移植中的问题+;VS2008的应用程序,visual-c++,visual-studio-2008,mfc,Visual C++,Visual Studio 2008,Mfc,我有一个用VC++开发的应用程序,它使用第三方dll,也用VC开发++ 它工作正常,当使用dependency walker进行检查时,应用程序和dll依赖于MFC42.dll、MSVCRT.dll、MSVCP60.dll等 应用程序现在被移植到VS2008,调用dll的代码没有任何更改。 调用DLL函数后,正常功能可以正常工作 但在尝试使用对话框调用函数时,如 MyFunc(void) { handle = AfxGetResourceHandle(); AfxSetResourceHandl
MyFunc(void)
{
handle = AfxGetResourceHandle();
AfxSetResourceHandle(::GetModuleHandle(mydll));
if( myCDialog.DoModal() == IDOK )
{
/* My Functionality */
}
AfxSetResourceHandle(handle);
}
尝试执行DoModal时,MFC42.dll(c0000005)中存在错误访问冲突
exe代码很好,因为它可以完美地与VS2008及更高版本的dll配合使用。我认为您需要使用
AFX\u MANAGE\u STATE(AfxGetStaticModuleState())
来使MFC框架能够正确地处理资源
extern "C" void WINAPI MyFunc(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if( myCDialog.DoModal() == IDOK )
{
/* My Functionality */
}
}
将应用程序移植到VC-2008时,不应再依赖于MFC42.DLL。这是VC 6.0中的MFC DLL 也许您的代码现在使用VC-2008 MFC,但您的库使用VC6.0中的MFC。 如果(库和代码)都共享MFC代码,那么这将无法工作 PS:切换开发环境时,请确保所有第三方LIB也支持此环境。可能您只需要一个新的lib文件。或者,如果您有重建库所需的源代码