Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ VC和x2B移植中的问题+;VS2008的应用程序_Visual C++_Visual Studio 2008_Mfc - Fatal编程技术网

Visual c++ VC和x2B移植中的问题+;VS2008的应用程序

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

我有一个用VC++开发的应用程序,它使用第三方dll,也用VC开发++ 它工作正常,当使用dependency walker进行检查时,应用程序和dll依赖于MFC42.dll、MSVCRT.dll、MSVCP60.dll等

应用程序现在被移植到VS2008,调用dll的代码没有任何更改。 调用DLL函数后,正常功能可以正常工作

但在尝试使用对话框调用函数时,如

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文件。或者,如果您有重建库所需的源代码