VC代码疑难杂症集锦

多年前的资源

大王叫我来巡山,果然有宝。切记:要写符合c++标准的代码。
旧版本AutoCAD二次开发资源包
vc6.0够老,够辣,主要是还能在win10上运行

多年前的代码如今还要编译

一下内容一切都是为了在新版vs中编译老旧老旧的代码。有时真的很无耐。

让最新的VS跑vc6.0开发的代码问题之一:变量继续生存

for右边括号内初始化的变量的作用域在for语句内,变量超出for语句的花括号就被会被销毁。而VC 6.0允许变量继续“生存”。如下代码,在VC 6.0可以编译,在现代编译器编译不通过,会报“ 未声明的标识符 ”之类的错误:
请在新版vs的"c++"->语言->强制for循环的一致性->设置为NO,这是可以解决编译vc6.0中局部变量超出作用域后继续生存的问题。
这篇节约生命的文章,记得往下看

WM_类消息映射函数编译不通过

解决办法:c+±>常规->公共语言运行时支持,选择Common Language Runtime Support (/clr).

让最新的VS跑vc6.0开发的代码问题之二:不安全函数错误(C4996)

奉上两份小点心。

  1. 项目的编译选项中增加(项目->属性->c/c+±>命令行):/D “_CRT_SECURE_NO_DEPRECATE” 。
  2. 项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加:_CRT_SECURE_NO_DEPRECATE
    这里还有其他方法

让最新的VS跑vc6.0开发的代码问题之三:c++ 不支持默认int 的解决办法(C4430)

一些函数定义中,在VC6中,如果没有显示的指定返回值类型,编译器将其视为默认整型;但是vs2008/vs2010不支持默认整型,解决这个问题不能修改每个没有显示指示返回值类型的函数地方,可以用排除4430来解决;具体的在打开project->BaseClasses properties->configuration->C/C++ ->Advance中禁用特定警告中排除4430即可。
原文链接。

让最新的VS跑vc6.0开发的代码问题之四:32位程序用64位编译时提示 GWL_USERDATA未定义

找到<WinUser.h>查看GWL_USERDATA的32位和64位版本定义。
GWL_USERDATA替换为GWLP_USERDATA <—64位版本多了一个P。

让最新的VS跑vc6.0开发的代码问题之五:32位程序用64位编译时提示 error C2440: ‘static_cast’ : cannot convert …

我遇到的问题:ON_WM_TIMER()处提示出错。
解决办法:afx_msg void OnTimer(UINT nIDEvent); 改为—> afx_msg void OnTimer(UINT_PTR nIDEvent)

LNK2026: 模块对于 SAFESEH 映像不安全

  1. 打开该项目的“属性页”对话框。
  2. 单击“链接器”文件夹。
  3. 单击“命令行”属性页。
  4. 将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。

老旧VC项目重现天日

首先应该查看那些文件

  1. 检查sln(解决方案)文件,用文本编辑器打开,有惊喜;
  2. 检查props文件,明确额外的依赖项,一般来说项目会继承这些props文件。更加重要的是,文件内容明确展示了依赖项的版本和名称。在一个就项目重新编译时,props文件的内容帮我准确的找到qt版本(msvc 2010+QT5.3.2),如果没有这些提示,我需要反复尝试QT5的各个版本(浪费生命啊)。
  3. 检查lib依赖,这个很简单了。
  4. 确定所有依赖项的编译位宽,32/64 ?

没有更多了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值