VS2013打开VC++6.0开发工程(error MSB8031、error C2440和error LNK2005的解决)

VS2013打开VC++6.0开发工程遇到的问题及解决


由于版本更新,之前的软件是在Visual C++ 6.0环境下开发的,目前要在Visual Studio 2013的环境下进行升级。用VS2013直接打开项目工程文件,编译运行会出现错误,主要是以下几个问题:

  1. error MSB8031 多字节字符集与Unicode字符集的冲突
  2. error C2440
  3. error LNK2005

error MSB8031 多字节字符集与Unicode字符集的冲突

Visual C++ 6.0默认使用多字节字符集,开发的工程代码中很多字符串与Visual Studio 2013默认使用的Unicode字符集的字符串格式不统一,用高版本的编译器打开低版本的工程文件会出现很多不兼容的错误。此时,并不需要一一修改源代码中所有的出错字符串,微软官方已经给出了解决办法。只需要在官网下载安装与高版本编译器相一致的微软基础类库的多字节字符集即可。链接地址如下:
微软基础类库的下载地址

error C2440

error C2440: “static_cast”: 无法从“UINT (__thiscall CSizingControlBar:😗 )(CPoint)”转换为“LRESULT (__thiscall CWnd:😗 )(CPoint)” f:\tools\4bands ifx_xmm2130_ft\common\sizecbar.cpp 109

CWnd类,afx_msg LRESULT OnNcHitTest(CPoint point);

而在CSizingControlBar中是afx_msg UINT OnNcHitTest(CPoint point);

只要将这些UINT替换为LRESULT就可以了。

查找OnNcHitTest,将下面两行:

afx_msg UINT OnNcHitTest(CPoint point);//.h

UINT CTestDlg::OnNcHitTest(CPoint point);//.cpp

改为:

afx_msg LRESULT OnNcHitTest(CPoint point);//.h

LRESULT CTestDlg::OnNcHitTest(CPoint point);//.cpp

error LNK2005

uafxcwd.lib(afxglobals.obj) error LNK2005: “public: virtual __thiscall CMemDC::~CMemDC(void)” (??1CMemDC@@UAE@XZ) already defined in MultiColorPlotCtrl.obj
上面是意思是,连接器说,我找到了两个定义,一个在 uafxcwd.lib(afxglobals.obj)里面,还有一个在MultiColorPlotCtrl.obj 。
工程中有一个MemDC.h文件,里面定义了一个CMemDC类,不巧的是,VS2010的MFC新增了这个类,所以链接时会出问题。
那怎么解决了?有如下办法:
1 修改MFC中CMemDC的名字。这个明显不行。。。
2 将emule中的CMemDC改个名字,这个方法可以,可是我找了下,貌似用这个类的文件还不少。不甘心一条条改,于是想出下面的方法。。。
3 增加一个宏定义,

#define CMemDC XCMemDC

将上面的语句加到stdafx.h的最后。(也可以在工程属性页中以编译器指令的形式定义宏,格式为 /D “CMemDC=XCMemDC”)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值