最近改点 c 写的东西,原始工程是 vc6 的, 自己的机器是 win7 , 已经安装了 vc2010。
坑来了。
安装 vc6, 看上去成功安装, 打开文件,死掉, 打开 workspace , ok, 再打开文件,死掉。这难道就是传说中的 vc6 与 win7 的兼容问题? 重新找了个号称 兼容 win7 的版本,安装, 完成, 打开文件 OK, 打开 workspace , 死掉,重试,一样的错误。 算了, 放弃。 用 vc2010 编译。
用 vc 2010 编译提示需要 hid.h , 好吧,还好机器上装了 windows 的 sdk , 找到这个 头文件,加到路径上,OK。
现在编译出需要的动态库了,运行的时候又有问题,找啊找,原来 vc 编译东西分 Debug 和 Release 版,默认是 Debug版, 用的部分 lib 没有提供 Debug 支持, 忍, 改为 Release 版,现在终于可以运行了。
过了一两天,又出问题了, 部分机器上安装的时候提示没有 mfc100.dll , 咨询 baidu google 两位大拿,原来这玩意是 vc 2010 的, 要想不用就得改编译参数, 我改 。更改 Code Generation 中 Runtime Library , /MT + Share MFC , 链接报错, /MT + Static MFC --- 链接报错,重复引用 /MD + Static MFC, 链接报错。 再咨询大神,得到回复, 工程中用到的 部分 lib 为 vc6 编译出来的,在 vc 2010 下使用可能用问题----- 难道这玩意还不向后兼容???。 放弃,重回 vc6。
打上微软自家的 FileTool 补丁, 倒是能弹出打开文件的对话框了,但打开 workspace 文件还是报错。
还好机器上有个 xp 的 vm, 在 vm 中装 vc6, 安装到是没问题了。 打开工程, OK,编译, 满以为可以正常一点, 又错, 需要 IPHLPAPI.h , 这又是什么东西, baidu, google, 原来这玩意后续版本已经自带了, vc6 + xp 要用需要装 sdk, 但这个 sdk, 微软自家都已经不再提供了.................
折腾了两天,现在又在新的折腾中。
VC6都已经是上个世纪98年的产品,明显是你接手的东西,做这个东西的人已经老了,跟不上时代发展嘛
宏哥早就说过
win32才是你应该依赖的东西,win32api才是真正的设计,真正的精髓
什么狗屁MFC,都是垃圾
这不是菜鸟么???你还不配吐槽你这明显的没经验啊,人家VC6的工程,既然你想用人家的,你就应该在XP+VC6的机器上调,你倒是好先在win7上折腾半天VC6,然后又跑到vm下去折腾,至于说什么微软不提供SDK了,自己网上找啊,这很早的东西自然官方就不提供,或许提供但是你没找到连接,比如php3的源码,php官方网站我找半天就没有,只有google了,也许什么地方应该还有人保留着,对别人遗留的老代码,你应该想象下当时的环境,也许还是win98+vc6搞的呢,
VC6还是挺不错的,VC6运行库是所有主流WIN系统自带的VC运行库,所以用VC6编译出来的执行文件非常小(而且不需要带运行库),
最后一个支持VC6的SDK是 MicrosoftPlatformSDK-February2003ForVC6,微软官网下载地址 http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/e1147034-9b0b-4494-a5bc-6dfebb6b7eb1/download-and-install-microsoft-platform-sdk-febuary-2003-last-version-with-vc6-support?forum=windowssdk
其实VC6,WINSDK只要设置几个环境变量就行了,不需要安装也可以使用,所以win7下编译肯定是没问题的,AAuto里就有一个VC6扩展库,VC6编译器+WINSDK精简后也就14.6MB,下面AAuto调用VC6编译DLL的示例,非常方便(win7下可以使用)
importvc6;varvc=vc6("/",,io.open())//输入C++源码vc.cpp=/******#include<iostream>#include<windows.h>usingnamespacestd;extern"C"__declspec(dllexport)int__cdeclAdd(inta,intb){MessageBox(0,"我是DLL我被调用","我是C++DLL",MB_OK);returna+b;}******///编译生成DLLvc.exec('cl*.cpp','/W3'/*警告等级*/,'/MD'/*使用多线程动态运行库*/,'/O2/Ot/GL/EHsc'/*代码优化选项*/,'/D"WIN32"/D"_WINDOWS"/D"_MBCS"/D"_USRDLL"'/*定义常数和宏*/,'/I"./INCLUDE"'/*指定头文件目录*/,'kernel32.libuser32.lib'/*导入库*/,'/link/SUBSYSTEM:WINDOWS/MACHINE:X86'/*后面是链接参数*/,'/out:test.dll'/*输出文件名*/,'/dll'/*输出DLL*/,'/LIBPATH:".\LIB"/LIBPATH:".\LIB2"'/*指定库目录*/)vardll=raw.loadDll("test.dll")Add=dll.api("Add","int(inta,intb)","cdecl")io.print(Add(2,3))VC6还是挺不错的,VC6运行库是所有主流WIN系统自带的VC运行库,所以用VC6编译出来的执行文件非常小(而且不需要带运行库),
最后一个支持VC6的SDK是 MicrosoftPlatformSDK-February2003ForVC6,微软官网下载地址 http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/e1147034-9b0b-4494-a5bc-6dfebb6b7eb1/download-and-install-microsoft-platform-sdk-febuary-2003-last-version-with-vc6-support?forum=windowssdk
其实VC6,WINSDK只要设置几个环境变量就行了,不需要安装也可以使用,所以win7下编译肯定是没问题的,AAuto里就有一个VC6扩展库,VC6编译器+WINSDK精简后也就14.6MB,下面AAuto调用VC6编译DLL的示例,非常方便(win7下可以使用)
importvc6;varvc=vc6("/",,io.open())//输入C++源码vc.cpp=/******#include<iostream>#include<windows.h>usingnamespacestd;extern"C"__declspec(dllexport)int__cdeclAdd(inta,intb){MessageBox(0,"我是DLL我被调用","我是C++DLL",MB_OK);returna+b;}******///编译生成DLLvc.exec('cl*.cpp','/W3'/*警告等级*/,'/MD'/*使用多线程动态运行库*/,'/O2/Ot/GL/EHsc'/*代码优化选项*/,'/D"WIN32"/D"_WINDOWS"/D"_MBCS"/D"_USRDLL"'/*定义常数和宏*/,'/I"./INCLUDE"'/*指定头文件目录*/,'kernel32.libuser32.lib'/*导入库*/,'/link/SUBSYSTEM:WINDOWS/MACHINE:X86'/*后面是链接参数*/,'/out:test.dll'/*输出文件名*/,'/dll'/*输出DLL*/,'/LIBPATH:".\LIB"/LIBPATH:".\LIB2"'/*指定库目录*/)vardll=raw.loadDll("test.dll")Add=dll.api("Add","int(inta,intb)","cdecl")io.print(Add(2,3))你这明显的没经验啊,人家VC6的工程,既然你想用人家的,你就应该在XP+VC6的机器上调,你倒是好先在win7上折腾半天VC6,然后又跑到vm下去折腾,至于说什么微软不提供SDK了,自己网上找啊,这很早的东西自然官方就不提供,或许提供但是你没找到连接,比如php3的源码,php官方网站我找半天就没有,只有google了,也许什么地方应该还有人保留着,对别人遗留的老代码,你应该想象下当时的环境,也许还是win98+vc6搞的呢,
想想py2和py3吧……软件这东西,都是有生命支持周期的,过期的东西不被支持也是常识,不然现在的win7没办法运行dos程序是不是也被称为「自己的东西自己都不兼容」?用gcc吧,骚年如果不用ide,直接用nmake就行了。
链接报错,重复引用: 这个是因为和lib的MT/MD参数冲突了,必须一致。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。