将VC ++应用程序移植到VS2008的问题

时间:2014-04-13 09:34:08

标签: visual-c++ visual-studio-2008 mfc

我有一个用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完美配合。

2 个答案:

答案 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 */
  }
}