C# 编译器选项 /platform(指定输出平台)32位程序运行到x64平台的问题
来源:互联网 发布:非负矩阵分解应用 编辑:程序博客网 时间:2024/04/29 08:43
---------------------------------------------------
已移至博客园
http://www.cnblogs.com/kongfl888/p/3351728.html
---------------------------------------------------
如果说你编译的exe运行时报错:
“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
这很有可能是你是以非托管的方式错误地引用了64位的API中去。
为什么会这样?
那你就要考虑VS的编译器选项 /platform
VS编译目标platform有这样的3个选项:AnyCPU,x86和x64。
如果一个程序被编译成AnyCPU,那么程序将包含2套相同逻辑的程序,一套在32位系统上用,另一套在64位系统上用。问题的原因就在这里。
如果你是在32位系统上用AnyCPU编译了代码,那么代码调用的时32位COM,在32位系统上是以32位方式运行,32位APP调用32位COM,着当然没问题。但是如果其他人在64位系统上调用你的程序,则程序是以64位APP调用32位COM。(既然这样那AnyCPU又有何用?!这其实是个鸡肋!所以为了解决这个问题,ms又给出了另一个参数:anycpu32bitpreferred,但这个只支持NET4.5以上)
解决方法就是:将其固定到具体的平台!如:x86,让他直接以兼容x86的指令集来运行程序!
微软MSDN:
/platform:string
参数
string
anycpu (默认值),anycpu32bitpreferred、ARM、x86、x64 或 Itanium。
anycpu (默认值) 在所有平台编译您的程序集运行。 只有该模式可用时,您的应用程序运行作为 64 位进程尽可能并返回 32 位的流程。
anycpu32bitpreferred 将程序集编译成可在任何平台上运行。 您的应用程序在支持 64 位和 32 位应用程序的系统上为 32 位模式下运行。 可以为面向 .NET framework 4.5 的项目仅指定此选项。
ARM 在有高级 RISC 设备 (ARM) 处理器的计算机上编译您的程序集运行。
x64 将程序集编译成可由 64 位公共语言运行库在支持 AMD64 或 EM64T 指令集的计算机上运行。
x86 编译 32 位,x86 兼容的公共语言运行时所的程序集。
Itanium 生成在一台计算机上的 64 位公共语言运行时所的程序集具有 Itanium 处理器。
在 64 位 Windows 操作系统上:
程序集编译 /platform:x86 在运行于 WOW64 下的 32 位 CLR 执行。
DLL 编译 /platform:anycpu 在与处理它加载的 CLR 执行。
编译 /platform:anycpu 的可执行文件在 64 位 CLR 执行。
可执行文件在 32 位 CLR 生成了 /platform:anycpu32bitpreferred 执行。
anycpu32bitpreferred 设置为可执行文件 (.EXE) 文件才是有效的,因此,它需要 .NET framework 4.5。
设置方法:
打开项目的“属性”页。
单击“生成”属性页。
修改 目标平台 属性,因此,面向 .NET framework 4.5 中,选择或清除 首选 32 位 复选框的项目。
另:
可以使用.NET SDK中提供的CorFlags命令查看程序集的目标平台,也可以修改它,这样就可以不用重新编译了。
- C# 编译器选项 /platform(指定输出平台)32位程序运行到x64平台的问题
- win7 64位平台编译的程序在XP 32位平台无法运行的解决方法
- vs2008 x64平台运行程序不成功
- nasm程序从32位到64位平台的移植(一)
- nasm程序从32位到64位平台的移植(二)
- nasm程序从32位到64位平台的移植(三)
- Windows 7 X64位平台下,VC6调试运行程序,无法终止进程
- Windows 7 X64位平台下,VC6调试运行程序,中断调试无法退出
- Windows 7 X64位平台下,VC6调试运行程序,中断调试无法退出
- Windows 7 X64位平台下,VC6调试运行程序,中断调试无法退出
- Windows 7 X64位平台下,VC6调试运行程序,中断调试无法退出
- WinCE平台的程序编译到Win32平台下运行
- WinCE平台的程序编译到Win32平台下运行
- WinCE平台的程序编译到Win32平台下运行
- 平台问题导致的程序不能运行
- 32位的apk 在64位平台上运行不停挂掉的问题
- 32位程序移植到64位平台前的准备工作
- 32位程序移植到64位平台前的准备工作
- 2014淘宝笔试一题详解
- AIX5.3服务器主备模式解决内存耗尽总结
- mysql不能设置当前时间为默认的方法
- 程序编译运行时头文件或动态链接库的查找
- poj3614-贪心、优先队列
- C# 编译器选项 /platform(指定输出平台)32位程序运行到x64平台的问题
- 远程连接Raspberry Pi(数莓派)图形用户界面(X Window)
- poj_1152_An Easy Problem!(进制)
- 关于DAMAGE: after Normal block的问题
- java性能调优应该尽量做到的事情
- [HDU 4119]Isabella's Message[字符串模拟]
- 两个关于字符串的问题
- String.Format举例
- hdu 2923 Einbahnstrasse 最短路