• vc6中向vs2010迁移的几个问题


    vc6版本支持的库编译:CJ60lib

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

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

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

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

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

      

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

         

      定位文件,做一下修改

     

    (2)再次build only

      2.1

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

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

       2.2

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

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

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

      

     2.3

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

      添加 int 的类型

      

    2.4

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

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

      这是因为, 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,因为打开问题消息响应,可以看到返回的类型是:

      定位问题的相应函数:

      

      

      在CJlib源码中修改如下:

       

      主要有两个文件:

      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修改源文件如下,统一参数不一致的问题。

      

      修改为VS2010支持的类型:

      

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

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

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

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

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

      

       

    end;

  • 相关阅读:
    Eclipse的tomcat插件
    sql优化:
    ecipse theme
    load()和get()的区别
    eclipse手动指定启动的jdk版本
    TOD&FIXME&XXX
    命令式和声明式
    显示器调色温
    jdeveloper优化:
    win7 登录后只能使用“临时配置文件”,原来的配置文件无法启用!
  • 原文地址:https://www.cnblogs.com/icmzn/p/6724969.html
Copyright © 2020-2023  润新知