最近在C#项目中嵌入一个视频软件Ffplayer,出现报错现象,提示平台开发视频.dll文件的兼容性和加载格式不正确的问题。最终查看是由于项目平台选择的是Any CPU和X86的引起的。目标平台有什么作用,各选项有什么差别。

一、在VisualStudio中,在编译设置中有如下选项:

x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行。

x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行。

anycpu:(默认值)将程序集编译为在任意平台上运行。

Itanium: 将程序集编译为由采用 Itanium 处理器的计算机上的 64 位公共语言运行库运行。

二、具体行为如下:

1)在 64 位 Windows 操作系统上:

用 x86 编译的程序集将在 WOW64 下运行的 32 位 CLR 上执行。

用 x64 编译的程序集将在 64 位 CLR 上执行。

用 anycpu 编译的可执行文件将在 64 位 CLR 上执行。

用 anycpu 编译的 DLL 将在与加载它的进程相同的 CLR 上执行。

2)在 32 位 Windows 操作系统上:

用 x86或anycpu 编译的程序集将在 32 位 CLR 上执行。

用 x64 编译的程序集无法运行。

说明:现在大多数用户使用的都是在WINXP以上的系统中运行程序(不管是32位的还是64位的),因此,基本不可能选择X64的编译程序集。 是不是都选择Any CPU这种默认方式就不会存在问题了呢?

首先看看Any CPU和x86的可执行文件(EXE)在32位和64位下有什么区别:Any CPU在32位下,EXE将以32位执行,而在64位下,EXE将以64位执行。而x86的话,始终以32位执行。

如果用户希望使用x86,也就是不希望64位下用64位方式执行EXE程序。系统中可能存在第三方的32位DLL,一旦使用64位执行的EXE,在调用到32位的DLL时,将无法调用。

如果用户希望使用Any CPU,是因为DLL的实际运行方式是受调用它的EXE所影响的,因此设为Any CPU就可以了(即选择默认)。而如果设定为x86,虽然看似没什么问题,但其无法在64位CLR中运行了,存在缺陷。

C#中Any CPU和X86和X64平台的差异对比相关推荐

  1. Windows下x86和x64平台的Inline Hook介绍

    原文链接:https://blog.csdn.net/PeaZomboss/article/details/129095200?spm=1001.2014.3001.5501 前言 我在之前研究文明6 ...

  2. Win10+VS2015平台下OpenCV3.1.0的x86和x64平台的Debug与Release模式的编译与配置

    闲话 昨天晚上在新电脑上重新配置了OpenCV3.1,之前虽然也弄过,不过当时是初学者,只是照着网上的教程简单的配置了Debug模式下x86的运行环境(大部分的教程也只教了这种方式的配置......) ...

  3. x86 和 x64平台下数据类型大小

    x86平台 x64平台 从以上测试可知,不管是x86平台还是x64平台,int类型大小都是32位4个字节 http://msdn.microsoft.com/en-us/library/aa38375 ...

  4. ARM和X86、X86和X64、Intel和AMD、CPU和GPU介绍

    一.ARM和X86 X86 和 ARM 都是CPU设计的一个架构.X86 用的是复杂指令集.ARM用的是精简指令集. 指令集其实就是机器码,机器码上是汇编,汇编之上是程序语言例如java.c.c#. ...

  5. x86、x64、amd64和arm CPU 架构 MSVC的各种版本 Visual Studio的安装

    Visual Studio的安装 https://blog.csdn.net/Copperxcx/article/details/122540629 x86.x64和amd64 参考讲得很好的一篇文章 ...

  6. vs打包错误:要在“系统必备”对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“Microsoft .NET Framework 4.7.2 (x86 和 x64)”项的文件

    错误内容: ERROR: 要在"系统必备"对话框中启用"从与我的应用程序相同的位置下载系统必备组件",必须将"Microsoft .NET Frame ...

  7. 文件后缀中的x86和x64 是什么意思?

    在文件后缀中,"x86"和"x64"通常表示不同的计算机体系结构或处理器架构. x86:x86是一种32位计算机体系结构,最初由Intel开发.它是目前广泛使用 ...

  8. x86 vs x64

    今天看到某青年的blog转贴, 那文章写得真是阎王爷打报告, 鬼话连篇. 现在网上的东西真不能看. 在这里我来写一点点关于x86和x64的东西. i686 : Intel 686 ( Pentium ...

  9. 【计算机】X86 arm X64 X32.....

    简介 ARM ARM64是CPU构架的一种,通常用于手机.平板等CPU,目前笔记本电脑也会采用ARM64构架的CPU. x86 x86是CPU构架的一种,通常用于笔记本电脑.台式电脑.服务器.超级计算 ...

最新文章

  1. swagger 返回json字符串_Net Core微服务入门全纪录(完结)——Ocelot与Swagger
  2. 编码练习——Java-String-API-练习
  3. mysql管理节点_MySql节点管理安装步骤需要在SerA和SerB上各做一次
  4. linux C 获取日期时间
  5. android 跨应用,Android跨应用获取资源
  6. java gui容器_[Java教程]GUI Panel 容器以及布局管理器
  7. 转载 - Linux 磁盘挂载
  8. TensorFlow学习笔记01:TensorFlow入门
  9. 使用 Sixel 图形格式在终端中显示缩略图
  10. 30. Element parentNode 属性
  11. echarts graph图重叠_借官方关系图尝试下屏蔽鼠标浮在 links 上弹出的提示框
  12. 计算机接口74LS138,搞定138译码器(一),译码器介绍+74LS 138译码器逻辑功能
  13. tumblr_如何在您的Tumblr博客中添加论坛
  14. 中文代码示例视频演示Python入门教程第五章 数据结构
  15. SpringBoot实现短信验证码校验
  16. 2.1 zio入门——把函数作用作为工作蓝图
  17. mac 开机启动php,mac系统,php-fpm加入开机启动项
  18. scratch二级考纲
  19. 关于交换数组元素的技术帖
  20. HDU-1425 排序

热门文章

  1. Qt入门教程【对话框】QInputDialog输入对话框
  2. QT入门之QPushButton
  3. STM32禁用JTAG,并使用JTAG引脚
  4. matlab画立体仓库库位图_仓库货物库位图在Excel电子表格中的设计与实现
  5. 成功的关键是看清大趋势,现在大趋势、大潮流是什么
  6. 《动态壁纸 : 手机壁纸大全》隐私协议
  7. 阿里云飞天加速高校计划续领六个月
  8. Android 中文 API (40) —— RatingBar
  9. 基于GMap.Net的地图解决方案
  10. 《数字电子技术》笔记