摆脱vc8和vc9的依赖库困惑

来源:互联网 发布:plc编程入门教程 编辑:程序博客网 时间:2024/05/16 06:16

大家都知道现在的vs2010马上就要推出了,但是还有很多人喜欢使用vc6进行编程,原因很简单,就是因为用vc6编译的程序,依赖的库msvcrt42。mfc42等在winxp之后的版本都自动集成了,所以,用户使用时像绿色软件一样。但是vc6早已是过时的开发环境了,他的界面效果不好,语法检测不严格。如果我们在用vs2003之后的所有开发环境开发出的程序也像vc6一样,不需要安装任何运行时库就可以绿色使用那该是多么幸福的事呀。下面我就介绍三种不依赖这些库的方法。

 

 

在一个纯win32程序里,假如我们只使用标准的API,那么编译出来的程序依然需要运行时的库,原因很简单,因为windows默认的winmain函数是由运行时函数startup调用的,所以在这种情况下必然会用到msvcrt80、90的库。解决的办法是

 

方法一:

修改项目属性-》c/C++->代码生成->运行时库 (将调试dll或dll修改为相应版本的非dll),这种方法就相当于将动态连接修改为静态链接。当然了这么做会使程序本身体积变大。

 

方法二:

利用宏#pragma comment(linker,"/entry:startup")

这个宏修改了函数的入口点函数,这样,windows加载进程时就不会先进入crt函数了。

 

以上两种方法都存在一些局限性。比如方法二中的代码必须不能使用任何crt函数,而面对mfc编写的程序两种方法就都无能为力了,下面介绍一种万能的方法:

 

 

方法三:

通过使用WDK或者DDK对程序进行编译。驱动编译的优点是我们可以指定所有的链接lib库,通常情况大家都会选择系统使用的库。而如果是mfc的类库在vc8或vc9中是根本不能自由选择的,编译都是设置死的。而采用驱动编译,就可以将这些库统统修改为mfc42.dll的依赖,这样就不存在高级版本静态链接和打包运行库的痛苦了。当然了采用这种方法时,一些vc6没有带的高级的方法是调用不了的。所以,其实也都或多或少的存在些不足。

原创粉丝点击