vc6中向vs2010迁移的几个问题

摘要:
vc6版本支持的库编译:CJ60lib1.用vs2010打开CJ60库的源码的dsw,强制打开设置项目属性的语言因为,如果代码字符的编码集不一样,则会出现函数冲定义,参数冲突等问题,这可以通过修改项目属性可以修改。修改为VS2010支持的类型:即要修改实现,又要修改声明。

vc6版本支持的库编译:CJ60lib

1. 用vs2010打开CJ60库的源码的dsw,强制打开

(1)设置项目属性的语言

因为,如果代码字符的编码集不一样,则会出现函数冲定义,参数冲突等问题,这可以通过修改项目属性可以修改。

因为VS2010默认示宽字符,所以,编译要从VC6(默认窄字符),要修改项目属性为不使用宽字符。

vc6中向vs2010迁移的几个问题第1张

2. 编译:项目,方式如下:

vc6中向vs2010迁移的几个问题第2张

(1)“编译”,出现一下问题:

vc6中向vs2010迁移的几个问题第3张 

定位文件,做一下修改

vc6中向vs2010迁移的几个问题第4张

(2)再次build only

2.1

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失

双击提示,打开文件,然后保存即可

vc6中向vs2010迁移的几个问题第5张

2.2

error C2065: “p”: 未声明的标识符

error C2065: “i”: 未声明的标识符

是因为vs2010更遵守C++标准,临时变量已经修正,需要把for(),以及if()括号中的局部变量,调制for或者if之前定义即可。

vc6中向vs2010迁移的几个问题第6张

2.3

error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

添加 int 的类型

vc6中向vs2010迁移的几个问题第7张

2.4

一大堆的重定义问题,如下:

error C2011: “tagSFBS_FLAGS”:“enum”类型重定义

vc6中向vs2010迁移的几个问题第8张

这是因为, shlapi.h中的代码被重新定义了,ATL在定义前会判断一下是否已经定义,而CJLIB库则没有判定,所以,只需要针对CJlib库源文件中的shlwapi.h包含注释掉。,一共有两处:

D:TOOL3RDPARTCJ60源码著名界面库cj60lib的源程序IncludeModulVer.h(12):#include <shlwapi.h>
D:TOOL3RDPARTCJ60源码著名界面库cj60lib的源程序IncludeShellTree.h(11):#include <Shlwapi.h>

只需要再引用出,将该文件注释掉  

//#include <Shlwapi.h>

经过上述步骤的解决,则问题解决了一大部分:

2.5

1>d: ool3rdpartcj60源码著名界面库cj60lib的源程序cj60libcjcontrolbar.cpp(155): error C2440: “static_cast”: 无法从“UINT (__thiscall CCJControlBar::* )(CPoint)”转换为“LRESULT (__thiscall CWnd::* )(CPoint)”从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast

定位到ON_WM_NCHITTEST(),即消息响应 函数返回值类型不匹配,这是因为VS2010以及VC6构造是不一样的。应该把

vc6的INT改为VS2010支持的LRESULT,因为打开问题消息响应,可以看到返回的类型是:

定位问题的相应函数:

vc6中向vs2010迁移的几个问题第9张

vc6中向vs2010迁移的几个问题第10张

在CJlib源码中修改如下:

vc6中向vs2010迁移的几个问题第11张

主要有两个文件:

cj60libcjsizedockbar.cpp(89

cj60libcjcontrolbar.cpp(155)

2.6

cjpagerctrl.cpp(75): error C2440: “static_cast”: 无法从“BOOL (__thiscall CCJPagerCtrl::* )(NMPGSCROLL *,LRESULT *)”转换为“BOOL (__thiscall CCmdTarget::* )(NMHDR *,LRESULT *)”
1> 在匹配目标类型的范围内没有具有该名称的函数

可以看出,VC6支持的是参数类型:NMPGSCROLL,而VS2010支持的参数是NMHDR,所以可以在CJlib修改源文件如下,统一参数不一致的问题。

vc6中向vs2010迁移的几个问题第12张

修改为VS2010支持的类型:

vc6中向vs2010迁移的几个问题第13张

即要修改实现,又要修改声明。

解决以上问题,则可以输出生成的dll文件

如果以debug编译,则输出d(debug)版本的库

vc6中向vs2010迁移的几个问题第14张

如果以release编译,则输出release版本。

注意,release,同样要修改项目属性语言为:不支持款字符。

vc6中向vs2010迁移的几个问题第15张

vc6中向vs2010迁移的几个问题第16张

end;

免责声明:文章转载自《vc6中向vs2010迁移的几个问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何在网页标题栏title加入icon图标?Linux端口转发的几种常用方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VC6使用Crypto++库执行对称加密运算时异常报错的解决办法

使用Crypto++库时运行VC6编译出来的程序,在运行到对称密码算法时会出现异常报错。 使用对称密码算法时,参考的代码是Crypto++ Wiki的代码,下载页面:http://www.cryptopp.com/wiki/Hash_Functions,在页面最下面有Sample Programs,里面执行密码运行时是这条语句: // Encryption...

VC6和VS2008中C++编译器差异

1. for中定义变量作用域不同 for (int i=0; i<100; i++){} for (int i=100; i<200; i++){} 以上代码在VS2008中可编译通过;在VC6.0下会提示" 'i' : redefinition "的编译错误。 2. static const变量能否在头文件中初始化 class A { p...

VS 6.00 工程项目文件详解

*.dsp(DeveloperStudio Project):是VC++的工程配置文件,比如说你的工程包含哪个文件,你的编译选项是什么等等,编译的时候是按照.dsp的配置来的。*.dsw(DeveloperStudio Workspace):是工作区文件,用来配置工程文件的。它可以指向一个或多个.dsp文件。*.clw:是 ClassWizard信息文件,...

VC add files to folder失效问题

VC—>add files to folder失效,郁闷了很久,最后网上一搜,都说的office2007惹的祸。抱着试一试的心理,卸载了刚刚装上没多久,才用习惯的office2007,重启后发现又好使了! 其实office2007还是很好用的,可惜了啊! 卸了之后再到网上查,发现还有解决冲突的办法: 不知从什么时候开始,VC6.0不听话了,open-...