【问题标题】:Issue in porting VC++ application to VS2008将 VC++ 应用程序移植到 VS2008 的问题
【发布时间】:2014-04-13 09:34:07
【问题描述】:

我有一个用 VC++ 开发的应用程序,它使用了一个第三方 dll,它也是用 VC++ 开发的 它工作正常,当使用dependency 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一起工作。

【问题讨论】:

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


    【解决方案1】:

    当您将应用程序移植到 VC-2008 时,应该不再依赖于 MFC42.DLL。这是来自 VC 6.0 的 MFC DLL。

    也许您的 codenow 使用 VC-2008 MFC,但您的库使用 VC 6.0 的 MFC。 如果两者(库和您的代码)共享 MFC 代码,则无法正常工作。

    PS:切换开发环境时,请确保您的所有 3rd 方库也支持此环境。可能你只需要一个新的 lib 文件。或者,如果您有需要重建库的源代码。

    【讨论】:

      【解决方案2】:

      我认为您需要使用AFX_MANAGE_STATE(AfxGetStaticModuleState()) 来使MFC 框架能够正确处理资源。

      extern "C" void WINAPI MyFunc(void)
      {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        if( myCDialog.DoModal() == IDOK )
        {
          /* My Functionality */
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 2020-10-28
        • 2014-07-31
        • 2017-05-08
        • 1970-01-01
        相关资源
        最近更新 更多