很少有人用了
多年前的资源
大王叫我来巡山,果然有宝。切记:要写符合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)
奉上两份小点心。
- 项目的编译选项中增加(项目->属性->c/c+±>命令行):/D “_CRT_SECURE_NO_DEPRECATE” 。
- 项目->属性->配置属性->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 映像不安全
- 打开该项目的“属性页”对话框。
- 单击“链接器”文件夹。
- 单击“命令行”属性页。
- 将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用。
老旧VC项目重现天日
首先应该查看那些文件
- 检查sln(解决方案)文件,用文本编辑器打开,有惊喜;
- 检查props文件,明确额外的依赖项,一般来说项目会继承这些props文件。更加重要的是,文件内容明确展示了依赖项的版本和名称。在一个就项目重新编译时,props文件的内容帮我准确的找到qt版本(msvc 2010+QT5.3.2),如果没有这些提示,我需要反复尝试QT5的各个版本(浪费生命啊)。
- 检查lib依赖,这个很简单了。
- 确定所有依赖项的编译位宽,32/64 ?
没有更多了。