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:\TOOL3RDPART\CJ60源码\著名界面库cj60lib的源程序\Include\ModulVer.h(12):#include <shlwapi.h>
  D:\TOOL3RDPART\CJ60源码\著名界面库cj60lib的源程序\Include\ShellTree.h(11):#include <Shlwapi.h>

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

//#include <Shlwapi.h>

  

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

2.5

  1>d:\tool3rdpart\cj60源码\著名界面库cj60lib的源程序\cj60lib\cjcontrolbar.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源码中修改如下:

  

  主要有两个文件:

  cj60lib\cjsizedockbar.cpp(89

  cj60lib\cjcontrolbar.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;

vc6中向vs2010迁移的几个问题的更多相关文章

  1. vc6中向vs2010迁移的几个问题(2)

    1. 库文件的迁移 参考:http://www.cnblogs.com/icmzn/p/6724969.html 2. 其他项目中的可能遇到的问题: 2.1 无法打开包括文件:“fstream.h”: ...

  2. vc6.0 PK vs2010

    从VC++6.0不足看VisualC++2010新特性 说起VC,有人想到维生素C(维C),有人想到风险投资(venture capital), 程序员们尤其是做底层开发的程序员或老程序员们第一感觉肯 ...

  3. 如何将Eclipse中的项目迁移到Android Studio 中

    如何将Eclipse中的项目迁移到Android Studio 中 如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的 ...

  4. 在Entity Framework 7中进行数据迁移

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:虽然EF7重新设计了Entity Framework,不过也还是能够支持数据迁移的. Entity Fra ...

  5. 在VC6中使用ogre进行游戏开发

    微软公司开发的visual c++6.0堪称史上最易用.最成熟的开发工具.vc6以其小巧.轻便赢得了程序员的喜爱,以至于在VS大行其道的时代,很多程序员仍然使用vc6作为开发工具,vc6的欢迎性可见一 ...

  6. VC6中创建Qt工程的创建

    文章来源:http://blog.sina.com.cn/s/blog_64d015c10100sf1o.html 本文主要介绍怎么创建可以在VC6中编译的QT工程.本文所采用环境为VC++6.0+Q ...

  7. laravel中migration 数据迁移

    简介 数据库迁移就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构.迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构.如果你曾经试过让同事手动在数 ...

  8. 20.1翻译系列:EF 6中自动数据迁移技术【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx EF 6 ...

  9. 20.翻译系列:Code-First中的数据库迁移技术【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/migration-in-code-first.aspx EF 6 Code-First ...

随机推荐

  1. L1-006 连续因子(20)(思路+测试点分析)

    L1-006 连续因子(20 分) 一个正整数 N 的因子中可能存在若干连续的数字.例如 630 可以分解为 3×5×6×7,其中 5.6.7 就是 3 个连续的数字.给定任一正整数 N,要求编写程序 ...

  2. Android.API.Context.getFilesDir()

    1. Context.getFilesDir() http://developer.android.com/reference/android/content/Context.html#getFile ...

  3. Node.js v7.4.0 Documentation Addons

    https://nodejs.org/docs/latest/api/addons.html Node.js Addons are dynamically-linked shared objects, ...

  4. VirtualBox中安装Fedora9及其ARM开发环境配置

    因为要学习Tiny4412开发板的嵌入式编程,需要用到Fedora9系统(和手册对应),我就在VirtualBox虚拟机(此虚拟机安装在Ubuntu12.04上)上安装了Fedora9,下面就讲解一下 ...

  5. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  6. springmvc+mybatis 构建cms+UC浏览器文章功能

    最近公司在模拟UC浏览器做一个简单的cms系统,主要针对于企业内部的文章浏览需求,这边考虑用户大多用mobile浏览文章内容,故使用原生的ios和android进行开发,后面也会集成html5. 1. ...

  7. apt install yum失败

    解决办法:sudo apt-get update

  8. xagrs 指定参数位置

    xargs还有指定参数位置的作用.假设我们要将目录下所有的.py文件放到Python目录中去,可以使用命令find . -name '*.py' | xargs -I {} mv {} ./Pytho ...

  9. Python学习1 基础数据类型

    一.字符串                         1.去除首尾字符 str_test = 'Hello World!' str_test.split()#将字符串分割为列表str_test. ...

  10. Centos 装系统 配置网卡,校准时间

    Vclient -控制台: 1.编辑网卡,第一块为外网,第二块为内网 #vi /etc/sysconfig/network-scripts/ifcfg-ens160 TYPE=Ethernet NAM ...