近期,有个项目开发,须要用到曾经项目的代码,只是曾经项目都是VC6下编译通过的,在VS2008下不一定编译通过,能编译通过也不一定能链接成功。以下总结一下我在一个VC6项目移植到VS2008中遇到的一些问题以及解决的方法。

1
类型转换

1)WCHAR *wszFind = wcschr( wszText,(WCHAR)'@');

这个代码在VC6下编译是没问题的,但在VS2008下,编译会报错,就是类型转换的问题,改动例如以下:

WCHAR *wszFind = (WCHAR *)wcschr( wszText,(WCHAR)'@');

2)

1)

int ConvertAnsiToUnicode16(const CHAR * szIn,CHARU16 *szOut,int nSize )

以下在VS2008编译不通过,

nLen = ConvertAnsiToUnicode( szIn,szOut,nSize );

例如以下改动能够:

nLen = ConvertAnsiToUnicode( szIn, (WCHAR *)szOut,nSize );

就是说VS2008,对代码的要求更严格,会对类型做检測,不会支持默认的类型强制转换。

2 DWORD dwPower = (DWORD)(pow(2.0f,(double)m_dwArraySize ));

编译提演示样例如以下:

XXX.cpp(58) : error C2666:“pow”: 6个重载有相似的转换

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\math.h(575):可能是“long double pow(long double,int)”

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\math.h(573):或      
“long double pow(long double,long double)”

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\math.h(527):或      
“float pow(float,int)”

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\math.h(525):或      
“float pow(float,float)”

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\math.h(489):或      
“double pow(double,int)”

C:\Program Files\Microsoft Visual Studio 9.0\VC\include\math.h(123):或      
“double pow(double,double)”

这个就是重载函数的问题。

能够例如以下:

方法一:

UINT nRes = (UINT)pow( (double)10.0f,(double)(m_nListCount-1) )*nMinRes;

方法二:

Double dValue = 10.0f

UINT nRes = (UINT)pow(dValue ,(double)(m_nListCount-1) )*nMinRes;

3 const BUFLEN = 26*4;

VS2008编译提示:

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

改动例如以下:

const int BUFLEN = 26*4;

4
作用域

for (int i = n; i < n + 16; i++)

{

m_bySeed[i % sizeof(m_bySeed)] ^= by16[i];

}

m_nUpdateCounter++;

if (0 == (m_nUpdateCounter % 1024))

{

SaveSeedIntoFile();

}

for (i = 0; i < sizeof(m_bySeed); i++)

{

m_bySeed[i] ^= rand() % 0xff;

}

上面代码在VS2008,会提示i未定义,这个就会作用域的问题。

改动例如以下:

int i;

for (i = n; i < n + 16; i++)

{

m_bySeed[i % sizeof(m_bySeed)] ^= by16[i];

}

m_nUpdateCounter++;

if (0 == (m_nUpdateCounter % 1024))

{

SaveSeedIntoFile();

}

for (i = 0; i < sizeof(m_bySeed); i++)

{

m_bySeed[i] ^= rand() % 0xff;

}

5
宏定义

typedef enum _STORAGE_QUERY_TYPE {

PropertyStandardQuery = 0,          // Retrieves the descriptor

PropertyExistsQuery,                // Used to test whether the descriptor is supported

PropertyMaskQuery,                  // Used to retrieve a mask of writeable fields in the descriptor

PropertyQueryMaxDefined     // use to validate the value

} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;

VS2008下编译提示与系统反复,所以在宏定义的时候,一定要添加与自己project功能相关的keyword,用来差别。

6
抛异常

例如以下

if(keysize<1)

throw exception("Incorrect key length");

这样的代码在VC6下能够编译,在VS2008编译只是,解决的方法直接屏蔽。

总结:

上面提到的问题,事实上大部分是一个编写习惯的问题。在写server代码,一定要考虑跨平台编译的问题,vc6、VS2008、linux等。各种平台的编译器对代码的检查要求不一样,可是仅仅要遵守C++编写规范,这些问题都能够避免。而在写client代码的时候也要考虑这些,代码的可移植性、可读性都是代码质量非常重要的方面。程序猿都不喜欢看别人的代码,改别人的代码,认为难看、难懂、难理解。可是自己在写代码的时候,又在给别人问候自己娘的机会。

好的代码,从我做起,从如今做起。

转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/26007423

VC6项目移植到VS2008的若干问题——好的代码,从我做起,从如今做起。的更多相关文章

  1. [摘抄]VC6.0移植到VS2008(vs2005)后的错误总结(未全部验证)

    ============================================================================================= 201405 ...

  2. VC6迁移到VS2008几个问题——良好的代码,从我做起,从现在开始。

    最近.有一个项目开发,需要使用一次项目的代码.只有当项目VC6下编译通过的,在VS2008下不一定编译通过,能编译通过也不一定能链接成功.以下总结一下我在一个VC6项目移植到VS2008中遇到的一些问 ...

  3. VC6.0代码移植到VS2008运行时乱码问题解决

    转载:http://blog.sina.com.cn/s/blog_6d0cbb030101a3cs.html 问题描述:     之前用VC6.0写过一个OpenGL的程序,后来需要将其放到VS20 ...

  4. JSP myecplise项目移植到ecplise

    把myecplise项目移植到ecplise的一些细节: 参考于http://www.cnblogs.com/liushuijinger/p/3396063.html 因为个人需要,需要把JSP项目从 ...

  5. VS2008项目移植到Linux

    不少人都遇到过这种情况:在Windows下用Visual Studio工具开发的程序需要移植到Linux系统中,做成Linux版本的,但程序比较大,在Linux上又离不开Make,手动编写Makefi ...

  6. Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

    作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种 ...

  7. Cocos2d-x项目移植到WinRT/Win8小记

    Cocos2d-x项目移植到WinRT/Win8小记 作者: K.C. 日期: 11/17/2013 Date: 2013-11-17 23:33 Title: Cocos2d-x项目移植到WinRT ...

  8. Cocos2d-x项目移植到WP8小记

    Cocos2d-x项目移植到WP8小记 作者: K.C. 日期: 10/24/2013 Date: 2013-10-24 00:33 Title: Cocos2d-x项目移植到WP8小记 Tags: ...

  9. CocoaPods管理的项目移植到别人电脑后找不到头文件

    CocoaPods管理的项目移植到别人电脑后找不到头文件 在TARGETS -> Search Paths -> User Header Search Paths 中 写入 ${SRCRO ...

随机推荐

  1. 第三篇、调优之路 Apache调优

    1.  简介 在第一篇中整合了apache + tomcat ,利用了apache解析静态文件为tomcat解压.但是在测试机上发现两者性能不足,不能充分利用服务器的性能,该篇中将对apache进行性 ...

  2. Java多线程:Semaphore

    Semaphore为并发包中提供用于控制某资源同时可以被几个线程访问的类 实例代码: // 允许2个线程同时访问 final Semaphore semaphore = new Semaphore(2 ...

  3. phpcms(4) V9 栏目管理

    phpcms V9框架系统后台管理之栏目管理,请参见下文的源码分析(添加栏目和修改栏目): 参照添加栏目的界面图示,便于对源代码的理解: <?php   // 文件路径:phpcms/modul ...

  4. 通过C# 打开一个应用程序

    System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo(); //设置外部程序名 Info ...

  5. jQuery之文本框得失焦点

    版本一 css代码部分: .focus { border: 1px solid #f00; background: #fcc; } 当焦点获得时,添加focus样式,添加边框,并改背景色为#fcc h ...

  6. github的package.json内容

    补充:npm的init命令生成package.json Name 必须字段. 小提示: 不要在name中包含js, node字样: 这个名字最终会是URL的一部分,命令行的参数,目录名,所以不能以点号 ...

  7. Dynamic Web Module 3.0 requires Java 1.6 or newer报错

    在项目的pom.xml的<build></build>标签中加入: <plugins> <plugin> <groupId>org.apac ...

  8. php基础知识【函数】(2)文件file

    一.路径  1.dirname -- 返回路径中的目录部分      $path = "/etc/passwd";      $file = dirname($path); // ...

  9. Typefaces and Personalities (字体与性格)

    Boring afternoon, searching something fun. See this article What Your Favorite Font Says About You , ...

  10. [BZOJ 1833] [ZJOI2010] count 数字计数 【数位DP】

    题目链接:BZOJ - 1833 题目分析 数位DP .. 用 f[i][j][k] 表示第 i 位是 j 的 i 位数共有多少个数码 k . 然后差分询问...Get()中注意一下,如果固定了第 i ...