VS项目调试使用x86,x64,Any CPU平台的区别

9 篇文章 0 订阅

VS项目调试使用x86,x64,Any CPU平台的区别

VS项目调试可以选择x86,x64,Any CPU,它们之间有什么区别?以往我也不怎么关注,最近在项目iis express里添加一个虚拟项目时,才意识到这个的影响。从网上找的资料,记录如下:

知识点

①dll(动态链接库)和exe(可执行文件):

Windows下有静态链接(lib)库和动态链接库(dll)两种共享代码的方式

​ 动态链接库(Dynamic Link Library)又称为“应用程序扩展”,在windows系统中,大多数应用程序并非仅有一个可执行文件exe,同时也包含一些相对独立(模块化)的dll文件dll中存放函数代码实现,exe中存放dll中相应函数代码的地址,而且dll中的代码可以被多个exe调用而在内存中仅保留一份拷贝,从而节省了内存空间。

x86、x64、Any CPU的区别

  1. 简单的说,它们之间最直接的区别就是:对应的编译出来的程序位数不同

    x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的。以此类推,x64对应的则是64位的。而Any CPU则是取决于当前的操作系统,若操作系统是32位的,则编译出来的程序就是32位的,反之编译出来的就是64位程序。

  2. 若你的启动项目,即主程序(编译出来是exe文件的)是x86平台下编译的,而它所依赖的一个项目(或动态链接库)是由x64位平台编译出来的,则会提示“未能加载文件或程序集…或它的某一个依赖性。试图加载格式不正确的程序。”之类的错误。这是因为32位程序不能加载64位的dll,更不能调用其中的类、方法和对象等

    ​ 反之,若主程序是由x64平台编译出来的,而dll是x86的呢?答案。也是不行的!说到这里,基本上可以确定一点:dll和主程序的生成平台只要一致就可以

    image-20221109212935261

    ​ 那么问题来了!若主程序是Any CPU编译的,而dll是由x86或者x64平台编译的,又或者,主程序是x86或者x64平台编译的,而dll是由Any CPU编译的呢?正确答案就是两者在“特殊情况”下都是可行的。

    为什么说是“特殊情况”下呢?因为第一点(红色字体处)也提到了,Any CPU取决于操作系统,而结合第二点上半部分(红色字体处)提到的,只要dll和主程序的生成平台一致,那么也是可行的

    ​ 所以,由上可知:若主程序是在Any CPU平台下编译的,那么编译dll的平台必须要和编译主程序的操作系统一致才行。若主程序是在x86或者x64平台下编译的,那么dll就必须要和主程序一致(铁则)

    不过有个特例:若dll由Any CPU编译的,那么这个dll就可以被32位和64位的主程序调用。这是为什么呢?请看第三点。

  3. 虽说Any CPU编译出来的程序取决于操作系统,但是由Any CPU编译出来dll则取决于调用它的主程序,即若主程序是32位的,那么dll也是32位的,若主程序是64位的,那么dll就是64位的。所以dll一般采用Any CPU平台编译,而主程序一般采用x86平台编译

在不清楚客户的电脑是什么类型的操作系统的情况下,或者两者都有的时候,则主程序采用x86平台编译,dll采用Any CPU平台编译

​ 4.使用x86平台调试的时候,是可以一边调试一边修改代码的,而x64平台下则不行(启用了编辑并继续的)。如下图:

image-20221109212935261

总结

1、x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的

2、x64平台编译出来的exe(可执行文件)或dll(动态链接库)对应的则是64位的。

3、Any CPU下的exe取决于当前的操作系统,系统是32位的,则编译出来的程序就是32位的,是64位的就是64位程序。

4、Any CPU编译出来的程序取决于操作系统

5、Any CPU编译出来==dll则取决于调用它的主程序==

6、由于系统中可能存在第三方的32位DLL,一旦使用64位执行的EXE,在调用到32位的DLL时,将无法调用

7、dll一般采用Any CPU平台编译,而主程序一般采用x86平台编译。

8、DLL的实际运行方式是受调用它的EXE所影响的,因此设为Any CPU就可以了

9、32位程序不能加载64位的dll,更不能调用其中的类、方法和对象

10、64位程序不能加载32位的dll,更不能调用其中的类、方法和对象

只要dll和主程序的生成平台一致,那么也是可行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值