VC6工程迁移到VC2008 SP1中,使用MFC 9.0静态链接后运行错误的解决办法
来源:互联网 发布:ctr数据是什么 编辑:程序博客网 时间:2024/05/17 08:56
微软前不久发布了Visual Studio 2008 Service Pack 1,其中包含了据说是有BCGSoft提供的一些新类,可以直接使用Office 2007/Visual Studio 2005的界面,闻之大喜,终于不用再眼馋BCGControlBar和Xtreme Toolkit这些付费的库了,为了获得VC6的界面,俺还在用自己4年前写的库:)
花了半天时间把手上的工程由VC6迁移到了VC2008,使用动态链接到MFC,一切正常(可惜在中文环境下字体很难看,这个貌似是一个BCG Library的bug,回头等有空再来解决它)。考虑到客户机上可能没有MFC 9.0的DLL,于是改成了静态链接,可惜编译链接没问题,运行时却出错了。
出错的位置位于AfxTabCtrl.cpp第1395行,一个ENSURE宏断言错误,看上去是找不到一个字符串资源。这种错误最为头疼,仔细检查了compiler和linker的设置,使用的库版本,没有发现错误,只好使用土办法“最小系统法”,用VC6生成一个MDI工程,转换到VC2008,加入一个CDockablePane派生的窗口,使用静态链接……果然同样的错误,接着生成了一个空的VS2005 like的空项目,然后从代码入手,一一对比检查,还是没有找到错误的地方,到底问题出在哪呢?忽然想到,或许应该从最原始的地方入手,既然是找不到IDS_AFXBARRES_CLOSEBAR定义的字符串,那么就找找看它在哪定义的,在atlmfc目录下搜索,这个ID定义在afxribbonres.h而存放于afxribbon.rc中。原来问题就在工程的rc文件中。VC2008生成的工程,在其rc文件中有如下代码:
#if !defined(_AFXDLL)
#include "afxribbon.rc" // MFC ribbon and control bar resources
#endif
说明在静态链接的时候,应该手动包含此资源。VC6生成的rc文件中自然是没有这一动作的了,于是打开rc文件,加上这一段代码,顺利通过。
- VC6工程迁移到VC2008 SP1中,使用MFC 9.0静态链接后运行错误的解决办法
- vc6.0编译c++程序后在vc2008中调试的技巧(符号信息和链接)
- access2010升至sp1后无法打开vba工程的解决办法
- vc2008 sp1 manifest文件中依赖的mfc版本不对问题
- 用VC2008打开由vc6.0编写的工程,可能会出现的错误
- VC6.0重装后新建选项卡中没有关于MFC工程的选项的解决方案
- VC2008中MFC使用GDI+
- VC2008中使用GDI+ (VC6也差不多)
- VC6.0工程迁移到VS2010
- MFC静态链接时的一个错误
- (VC6)MFC基于对话框工程添加菜单MENU后,再删除时出现无法启动(运行)的情况
- VC6中链接access数据库时出现数据被截断的错误解决办法
- VC6.0“打开”和“添加到工程”失效,使用对应快捷键出错的解决办法
- VC6.0重装后没有MFC模块的解决办法
- VC6编译的静态库,在VC2008下使用报错
- vc6程序迁移到vs2008一般性错误
- 成功的把Python嵌入到VC2008和VC6.0中
- vc6下directx8迁移到vs2005中若干问题的解决方案
- 文学研究助手
- 史上最不安全的浏览器——Dangerous Browser
- 08.09.10 a new class and a new function
- 存储过程——天使还是魔鬼
- vc初步之——— WM_Paint 消息详解
- VC6工程迁移到VC2008 SP1中,使用MFC 9.0静态链接后运行错误的解决办法
- 校园导游咨询系统
- vc初步之——— HDC,CDC,CClientDC的区别和联系是什么?
- Struts2+Spring2+Hibernate3 web应用示例(一)
- 日子一天一天过去。。
- Struts2+Spring2+Hibernate3 web应用示例(二)
- 用栈判断字符串的特定输入
- Struts2+Spring2+Hibernate3 web应用示例(三)
- apue2读书笔记