吐槽一下 vc

clt 发布于 2014/05/24 10:04
阅读 872
收藏 0
最近改点 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, 微软自家都已经不再提供了.................    
折腾了两天,现在又在新的折腾中。

加载中
0
南湖船老大
南湖船老大

VC6都已经是上个世纪98年的产品,明显是你接手的东西,做这个东西的人已经老了,跟不上时代发展嘛

0
宏哥
宏哥

宏哥早就说过

win32才是你应该依赖的东西, win32api才是真正的设计, 真正的精髓

什么狗屁MFC, 都是垃圾

0
piyoma
piyoma
这不是菜鸟么???你还不配吐槽
0
擅长被美女推倒
擅长被美女推倒

你这明显的没经验啊,人家VC6的工程,既然你想用人家的,你就应该在XP+VC6的机器上调,你倒是好先在win7上折腾半天VC6,然后又跑到vm下去折腾,至于说什么微软不提供SDK了,自己网上找啊,这很早的东西自然官方就不提供,或许提供但是你没找到连接,比如php3的源码,php官方网站我找半天就没有,只有google了,也许什么地方应该还有人保留着,对别人遗留的老代码,你应该想象下当时的环境,也许还是win98+vc6搞的呢,

0
figer1
figer1

VC6还是挺不错的,VC6运行库是所有主流WIN系统自带的VC运行库, 所以用VC6编译出来的执行文件非常小(而且不需要带运行库), 

最后一个支持VC6的SDK是Microsoft Platform SDK - February 2003 For VC6,微软官网下载地址 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,WIN SDK只要设置几个环境变量就行了,不需要安装也可以使用,所以win7下编译肯定是没问题的,AAuto里就有一个VC6扩展库,VC6编译器 + WINSDK精简后也就 14.6MB, 下面AAuto调用VC6编译DLL的示例,非常方便( win7下可以使用 )

import vc6;

var vc = vc6( "/",, io.open() )  

//输入C++源码
vc.cpp = /******

    #include <iostream>
    #include <windows.h>
    using namespace std;
      
    extern "C" __declspec(dllexport) int __cdecl Add( int a, int b)  
    { 
        MessageBox(0, "我是DLL我被调用", "我是C++ DLL", MB_OK); 
        return a + b;
    }
    
******/

//编译生成DLL 
vc.exec(
    'cl *.cpp'
    ,'/W3' /*警告等级*/
    ,'/MD' /*使用多线程动态运行库*/
    ,'/O2 /Ot /GL /EHsc' /*代码优化选项*/
    ,'/D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"' /*定义常数和宏*/
    ,'/I"./INCLUDE"'/*指定头文件目录*/
    ,'kernel32.lib user32.lib' /*导入库*/
    ,'/link /SUBSYSTEM:WINDOWS /MACHINE:X86' /*后面是链接参数 */
    ,'/out:test.dll'/*输出文件名*/
    ,'/dll' /*输出DLL*/ 
    ,'/LIBPATH:".\LIB" /LIBPATH:".\LIB2"' /*指定库目录*/
)

var dll = raw.loadDll("test.dll")
Add = dll.api("Add","int(int a,int b)" ,"cdecl") 
io.print( Add(2,3) )



0
clt
clt

引用来自“figer1”的评论

VC6还是挺不错的,VC6运行库是所有主流WIN系统自带的VC运行库, 所以用VC6编译出来的执行文件非常小(而且不需要带运行库), 

最后一个支持VC6的SDK是Microsoft Platform SDK - February 2003 For VC6,微软官网下载地址 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,WIN SDK只要设置几个环境变量就行了,不需要安装也可以使用,所以win7下编译肯定是没问题的,AAuto里就有一个VC6扩展库,VC6编译器 + WINSDK精简后也就 14.6MB, 下面AAuto调用VC6编译DLL的示例,非常方便( win7下可以使用 )

import vc6;

var vc = vc6( "/",, io.open() )  

//输入C++源码
vc.cpp = /******

    #include <iostream>
    #include <windows.h>
    using namespace std;
      
    extern "C" __declspec(dllexport) int __cdecl Add( int a, int b)  
    { 
        MessageBox(0, "我是DLL我被调用", "我是C++ DLL", MB_OK); 
        return a + b;
    }
    
******/

//编译生成DLL 
vc.exec(
    'cl *.cpp'
    ,'/W3' /*警告等级*/
    ,'/MD' /*使用多线程动态运行库*/
    ,'/O2 /Ot /GL /EHsc' /*代码优化选项*/
    ,'/D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL"' /*定义常数和宏*/
    ,'/I"./INCLUDE"'/*指定头文件目录*/
    ,'kernel32.lib user32.lib' /*导入库*/
    ,'/link /SUBSYSTEM:WINDOWS /MACHINE:X86' /*后面是链接参数 */
    ,'/out:test.dll'/*输出文件名*/
    ,'/dll' /*输出DLL*/ 
    ,'/LIBPATH:".\LIB" /LIBPATH:".\LIB2"' /*指定库目录*/
)

var dll = raw.loadDll("test.dll")
Add = dll.api("Add","int(int a,int b)" ,"cdecl") 
io.print( Add(2,3) )



其实需要就是这个东东,本来也不用 ide 做什么东西。  
0
clt
clt

引用来自“piyoma”的评论

这不是菜鸟么???你还不配吐槽
之前一直都是写 Java ,  上次写 C 的东西 还是 上学的时候,但一个 东西搞的编译一下也这么复杂,实在是对这个东西没爱。 
0
clt
clt

引用来自“擅长被美女推倒”的评论

你这明显的没经验啊,人家VC6的工程,既然你想用人家的,你就应该在XP+VC6的机器上调,你倒是好先在win7上折腾半天VC6,然后又跑到vm下去折腾,至于说什么微软不提供SDK了,自己网上找啊,这很早的东西自然官方就不提供,或许提供但是你没找到连接,比如php3的源码,php官方网站我找半天就没有,只有google了,也许什么地方应该还有人保留着,对别人遗留的老代码,你应该想象下当时的环境,也许还是win98+vc6搞的呢,

少东西还可以接受,找找安装上就是了,搞的自己的东西和自己的东西都不兼容就不理解了。  好像 .net 的几个版本之间也不完全兼容,记得有个软件,必要要在特定的 .net 版本上才能运行 ..........
Gmail.com
Gmail.com
想想py2和py3吧……软件这东西,都是有生命支持周期的,过期的东西不被支持也是常识,不然现在的win7没办法运行dos程序是不是也被称为「自己的东西自己都不兼容」?
0
yuncliu
yuncliu
用gcc吧,骚年
0
FreeZ
FreeZ

如果不用ide,直接用nmake就行了。

链接报错,重复引用:这个是因为和lib的MT/MD参数冲突了,必须一致。

返回顶部
顶部