将 VC++ 应用程序移植到 VS2008 的问题
Posted
技术标签:
【中文标题】将 VC++ 应用程序移植到 VS2008 的问题【英文标题】:Issue in porting VC++ application to 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一起工作。
【问题讨论】:
【参考方案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 */
【讨论】:
以上是关于将 VC++ 应用程序移植到 VS2008 的问题的主要内容,如果未能解决你的问题,请参考以下文章
将 WCF 项目从 VS 2008 移植到 2010 时出错
从 VS6 移植到 VS2008 时在不寻常的架构中使用单元测试?