如何让32位编译的程序在64位系统中正常运行

合集下载

在64位的环境下编译32位的应用程序

在64位的环境下编译32位的应用程序

在64位的环境下编译32位的应用程序1) 工具安装:a) 首先必须安装以下基本编译工具:sudo apt-get install gcc build-essential linux-header-`uname -r` dkmsb) 另外,为编译32bit程序,还需要安装以下软件包sudo apt-get install ia32-libs libc6-dev-i386 linux322) 最关键的东西是需要告知gcc编译器编译的平台是i386, 所以需要:a) 在configure前加上linux32b) 在configure后加上"CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32"注:linux32 命令主要用来设置一下主机环境,其实影响的就是configure命令中--build, --host和--target三个选项。

linux32 命令使用前后区别:staff-1:~/src/lame-3.96.1# ./configurechecking build system type... x86_64-unknown-linux-gnuchecking host system type... x86_64-unknown-linux-gnustaff-1:~/src/lame-3.96.1# linux32 ./configurechecking build system type... i686-pc-linux-gnuchecking host system type... i686-pc-linux-gnu3) 如果编译的程序是32位的,所需要的动态链接库也必须是32位的,可以重新编译得到,也可以直接用sudo apt-get install libXXX:i386命令安装到编译主机上,":i386"即表示32位版本的该库。

系统小技巧:在64位系统中运行32位或16位程序

系统小技巧:在64位系统中运行32位或16位程序

系统小技巧:在64位系统中运行32位或16位程序由于CPU和系统架构的更新,现行主流的Windows系统已经是64位。

然而许多人还恋恋不舍的一些老游戏或老程序已经没有了更新。

在64位的系统上运行这些程序,往往会出现运行故障。

如何才能解决这个烦心事?无奈的选择旧的不代表没有用就像其他硬件一样,CPU在过去的10多年间经历了重大的升级变革。

这不仅仅体现在核心的数量,还涉及到了体系结构的更新。

因此,现在的操作系统也围绕着CPU系统结构的升级而升级,依次出现了针对32位和64位处理器的版本。

然而,针对32位处理器并非第一个,在它之前还有16位处理器统治世界的时代。

更重要的是,目前仍在“服役”的一些应用程序仍然基于过时的体系结构,尽管Windows 10的增强兼容性选项可以创建一个与现行版本兼容的环境,但其仍然没有包含一些老软件所需的支持组件,因此致使一些老程序无法运行,因为这些程序的安装程序本身是基于16位的。

然而,旧的不代表没有用。

在没有新式应用程序替代的情况下,旧应用程序和游戏仍有其用武之地。

因此,需要找到能够运行它们的办法。

解决有道在新系统上运行旧程序目前Windows的主流版本已经发展到64位,但许多老程序仍未升级到64位版本。

好在目前主流的64位Windows 8.1或Windows 10都建有一种启用32位应用程序专门兼容机制,名为WoW64兼容层,它能够让我们在64位Windows上运行大多数32位应用程序,就像直接在32位Windows上运行一样。

但是,基于32位架构的老程序有一个明显的短板,它们只能使用2GB多的内存。

对于目前绝大多数电脑来说,内存利用率甚至还不足四分之一。

虽然目前多数电子游戏建立在64位架构之上,能够充分利用机器上安装的大容量内存空间,但许多老游戏由于采用32位架构设计,因此同样也无法充分利用现有内存空间。

1. 解决潜在的兼容性问题的基本方法避免软件与系统的不兼容的最好方法是安装最新版的64位电子游戏或应用程序。

64位系统兼容32位应用程序

64位系统兼容32位应用程序
x64作業系統的IIS跑framework1.1心得FrameWork2.0(簡稱FW2.0)支援32bit與64bit,而FW1.1僅支援32bit,
所以當x64作業系統的IIS6想要跑FW1.1的程式,就必須將64bit的IIS降低為支援32bit。
我們可以在DOS模式下,執行下列指令
然後執行 aspnet_regiis.exe -s W3SVC/1/ROOT/虛擬目錄名稱
執行完後記得要到IIS的網頁延伸服務中,確認1.1.4322是否有允許,這樣才能跑唷!
但是可惜的是CrystalReport9.1似乎在x64平台上是不支援的,因為一直有問題,也暫時找不到答案。
C:\Inetpub\AdminScripts\cscript.exe adsutil.vbs get W3SVC/AppPools/Enable32BitAppOnWin64
成功後就已經將IIS降為32bit,但是由於IIS的32bit模式,介面不支援64bit,所以會發生在IIS中,虛擬目錄設定的屬性頁上,
注意: 2.0 的内部版本可能随当前发行的内部版本的变化而变化。这些步骤适用果你將IIS回復成支援64bit,
則這個屬性就又會出現...所以不見是正常的。
那重點來了,沒法下拉切換要執行的framework版本,那該怎麼設定目錄需求的framework版本?
其實這是需要透過指令來達成~~
首先先切換到Framework的目錄底下,譬如要設定1.1版,就在DOS模式切換到C:\WINDOWS\\Framework\v1.1.4322>
3. 键入以下命令,安装 2.0(32 位)版本并在 IIS 根目录下安装脚本映射:
%SYSTEMROOT%\\Framework\v2.0.50727\aspnet_regiis.exe -i

32位程序移植到64位平台前的准备工作

32位程序移植到64位平台前的准备工作

32位程序移植到64位平台前的准备工作我们最近完成的一个项目是移植一个大型的32位应用程序,它可在64位环境中支持11个操作系统平台,并且程序的源代码超过了30万行。

由于此32位程序是在几年前分成几部分开发而成,所以极有可能代码是由不同的开发者编写。

鉴于此,我们有理由怀疑,在64位移植中导致问题的类型不匹配,很有可能是在这几年中随着程序模块的添加与删除而引入的。

我们移植此32位程序到64位平台,是为了利用64位技术的先进之处--支持更大的文件、支持更大的内存、及64位计算,大体使用的方法是一个反复迭代的过程,不断地在一些细节问题上来来回回,如字节序、调整编译器选项等等,并时不时停下来查看是否达到了总体目标--遵从ANSI标准及源代码将来的可移植性。

第一步,我们研究了64位的系统资源,以充分了解11个操作系统平台上每一个的编译器选项、内存模型和编码方面的考虑。

作为全部工作的起点,我们在其中一个平台上打开了所有编译器警告,进行第一次构建,并仔细检查构建日志信息。

通过这些最初的构建、使用本地调试器、及之后使用如Parasoft''s Insure++(/)这样的工具,我们确定了一个开发蓝图,接下来,编制了一个清晰彻底的源代码目录清单,并在每次配置构建之后进行相应的检查。

经过最初的代码修改、调试、查阅构建日志,已经有足够的信息对现实中可能碰到的事件进行排序以确定优先次序。

在一个拥有所有基本功能的程序成功地通过我们的自动测试案例之后,移植工作总算到了一个转折点;此测试除了测试64位功能,也包含了向后兼容性测试。

如果你所移植的项目中有几个不同的64位平台,很可能要在其上一一测试,一旦程序可在第一个平台上正确运行,接下来就要测试下一个平台,如此这般下去。

然而,我们却发现了一个非常好的方法,可在同一时间,在所有的平台上进行工作,这是因为:·每一个编译器都在它的警告信息中都提供了不同的信息,仔细查看几个编译器产生的错误,可有助于我们定位问题区域。

从32位平台移植到64位平台的解决方案

从32位平台移植到64位平台的解决方案

从32位平台移植到64位平台的解决方案从32位平台移植到64位平台的解决方案一、概述1.移植的原因由于高性能服务器、数据库管理系统、电脑辅助设计工具,以及数字内容创作工具等应用方案均需要处理大量数据及占用存储器大量地址,因此为了满足这类应用方案的需要,64位技术便应运而生。

大约从九十年代后期起,就已经有64位机器问世,从去年到今年,Intel体系结构的芯片也开始出64位了.在UNIX环境下,已有几种操作系统支持64位环境了,据说微软也准备将Windows升级为64位操作系统。

可以预料,将来32位平台将不再是主流,唱主角的将是64位平台。

到时,客户环境也将全是64位平台。

因此,由于下面这样一些原因,使得某些应用程序从32位移植到64位:(1).工程、科学、商业---需要地址空间大于32位.大数据集:需处理的数据大于32位所能处理的极限;(大文件或数据库的内存映射是一种常用技术---通过把文件或数据库保存在内存,以避免经常的磁盘I/O操作.).计算需要1.程序复杂性;若是32位系统,32位程序,则虽然也能处理需大地址空间的应用,但程序将变得复杂;2.应用程序的吞吐量;SMP系统与并行编程不断用来处理科学计算与其他问题;这意味着,在32位系统上,多至12个高速处理器共享不超过4GB 的内存;64位系统则能为每个进程提供必要的内存与I/O资源,使得SMP能很好地进行扩展,并能提供科学,工程,商业领域所需的批量计算;3.典型的64位应用---决策支持、数据仓库、数据挖掘、基于因特网的应用、电子商务应用、Web服务器、多媒体服务器、数字密集的应用、一般数据库、大阵列操作应用.(2).现存32位系统---资源短缺限制了总体性能与吞吐量的提高现存32位多用户系统性能不是受限于CPU,而是受限于I/O带宽;而由分页引起的I/O又主要是由于内存不足于存储整个文件;如果有足够的内存可用,那么将显著减少分页,从而显著地改善系统性能..高压力环境下的32位应用程序:基于因特网的应用、电子商务应用、Web服务器、多媒体服务器、一般服务器、实时系统.(这些应用可从OS提供的大内存获得性能提高,因为OS会自动地为每个32位应用提供更多的内存与I/O资源.因此,64位系统能运行更多的并发的,大的32位应用程序.2.移植原则i.移植后的程序既可作为64位机器上的32位程序运行,又可作为64位机器上的64位程序运行;只要觉得有需要,就可将32位程序重编译为64位程序;ii.在64位平台上,不管是作为32位程序还是作为64位程序运行,其性能至少不应比32位程序在32位平台上运行的性能差;iii.32位进程与64位进程可同时在64位平台上运行.3.移植步骤将现有32位程序移植到64位时,由于AIX V4.3本身对32位程序与64位程序的支持,所以绝大部分的系统调用与C语言程序结构都不用改变,只要在源程序中遵守系统调用接口与相应的数据类型;但是,还是有一些由于数据类型长度的改变而引起的兼容性问题.因此从32位程序移植为64位程序一般必须经过下列步骤:(1).源程序的兼容性检查;这一步主要检查由于数据类型长度改变而引起的兼容性问题;(2).将从第(1)步检查出的兼容性源程序进行修改;(3).修改makefile文件;二、32位平台与64位平台1.平台的定义计算机系统是由硬件与软件两部分组成的。

64位操作系统调用32位的DLL说明

64位操作系统调用32位的DLL说明

64位要用 C:\Windows\SysWow64下的 regist32注册另外 IIS下要设置应用是32位的单独执行vbs的话,也要用 C:\Windows\SysWow64下的cscript.exeX64上的IIS調用32位的DLL方法程序在编译的时候默认是Any CPU,即编译的程序可以在X86、X64系统平台上运行。

若希望我们的程序运行在X64系统上,我们所要做的仅仅是部署IIS,修改配置。

若想程序运行于IIS32位模式下,即运行在.net framwork32位下进行如下配置:1.修改IIS配置,允许32位程序运行。

cscript %systemdrive%/inetpub/adminscripts/adsutil.vbs setw3svc/appPools/enable32bitapponwin64 12.为IIS注册32。

注册后在IIS的web扩展里显示的是2.0.*32bit。

C:/WINDOWS//Framework/v2.0.50727/aspnet_regiis -i3.Web扩展里允许 2.0.*32bit运行。

运行的是w3wp32.exe进程。

二.64位模式1.cscript %systemdrive%/inetpub/adminscripts/adsutil.vbs setw3svc/appPools/enable32bitapponwin64 0默认就是0,若原来运行了32位程序,则需要重新设置为0。

2.C:/WINDOWS//Framework64/v2.0.50727/aspnet_regiis - i为IIS注册64为。

注册了64位的IIS在Web扩展里显示的是2.0.*。

3.Web扩展里允许 2.0.*运行。

运行的是w3wp.exe进程。

处理后还是没有出现“w3wp32.exe进程”。

但我的 Web扩展里面是有, 2.0的32位设置为允许的。

后新建了应用程序池,在新建的应用程序池的“高级设置”里面,把“启用32位应用程序”设置为true。

杀死进程,解决运行异常---让64位程序调用32位程序更流畅

杀死进程,解决运行异常---让64位程序调用32位程序更流畅

杀死进程,解决运⾏异常---让64位程序调⽤32位程序更流畅由于32位程序中还调⽤了⼤量dll,导致每次调⽤时启动与关闭时都拖泥带⽔,致使出现运⾏异常runtime error R6016 - not enough space for thread data,经尝试发现,这个异常会随运⾏内存变化⽽变化,根本原因是因为多次调⽤32位程序后,导致没有内存空间创建新的进程。

经查找资料显⽰,这个问题经常出现在由C、C++、Vb6等写的代码中,⽽像C#中有⾃动内存管理,所以⼀般不会出现此类问题。

64位程序如下:1process.Kill();⽴刻杀死⼀切由这个32位程序启动的进程,⽤⼀次,杀⼀次,不影响下次使⽤123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34static void Main(string[] args){ //创建refpropPipe进程Process process = new Process();//将refpropPipe.exe放在与refprop64Hv相同路径下,相对路径引⽤process.StartInfo.FileName = @"C:\Users\Administrator\source\repos\refpropPipe\refpropPipe\bin\Debug\refpropPipe.exe"; //process.StartInfo.FileName = "refpropPipe.exe";process.Start();double value = 0;//向refpropPipe发送调⽤信息,即查询输⼊变量值using(NamedPipeClientStream pipeClientStream = new NamedPipeClientStream("request")){pipeClientStream.Connect();string input = Method + ","+ FluidName + ","+ InpCode + ","+ Units + ","+ Prop1 + ","+ Prop2;using(StreamWriter writer = new StreamWriter(pipeClientStream)){writer.WriteAsync(input);}}//接收refpropPipe返回的信息,即查询结果using(NamedPipeClientStream pipeClientStream = new NamedPipeClientStream("respose")){pipeClientStream.Connect();using(StreamReader reader = new StreamReader(pipeClientStream)){string val = reader.ReadToEnd();value = Convert.ToDouble(val);}}//process.WaitForExit();//process.Close();//不在等待了,直接杀死进程,省得拖泥带⽔,快哉快哉process.Kill();}。

32位程序移植到64位需要考虑的问题

32位程序移植到64位需要考虑的问题

32位程序移植到64位需要考虑的问题概述从32位到64位,根本性的区别在于两种数据类型发生了变化:long和pointer。

在32位环境下,两者长度都是32位,也就是4个字节;而在64位环境下都是8个字节。

所以当你把pointer或者long 型数据赋给int型时,会发生数据截断(data truncation)。

1、32位与64位数据模型之间的区别32位应用的数据模型我们称作ILP32(之所以这样命名,是因为int,long,pointer都是32位),而64位应用则采用LP64模型(意味着long,pointer变成64位了,其他的不变)。

在当前的32位环境下,我们可以认为int,long,pointer是等价的,因为它们占用相同的字节,于是就有很多混用的情况;但是到了64位的时代,long和Poniter的大小都改变了,原来的假设不再成立。

2、注意int和pointer转换因为integer与pointer大小相同,所以32位代码中常常把pointer转换为int或者unsigned int,以便算术运算。

为了移植,你可以把pointer转换为unsigned long,因为long和pointer都是等长的,无论是在ILP32或LP64。

但是,为了使代码更清晰,推荐用uintptr_t,uintptr_t和intptr_t都需要包含头文件inttypes.h。

例如:下面代码在64位环境下编译出错:[cpp] view plain copy1.char *p = &something;2.p = (char *) ((int)p & PAGEOFFSET);3.4.% cc ..5.warning: conversion of pointer loses bits改用uintptr_t后,无论是32位或者64位都没问题:[cpp] view plain copy1.char *p = &something;2.p = (char *) ((uintptr_t)p & PAGEOFFSET);3、注意int和long转换在ILP32中,可能从未对int和long加以区分,因此,混用的情况非常多,看下面代码:[cpp] view plain copy1.int A = 0;2.long B = 0;3.long C = 0;4....5.A = B + C;6.7.8.% cc9.warning: assignment of 64-bit integer to 32-bit integer 4、结构体字节对齐及大小问题在结构体中,各个成员的起始地址都是对齐字节的倍数,例如:[cpp] view plain copy1.struct T2.{3.int i;4.long j;5.int k;6.char *p;7.};在ILP32中,sizeof(T)应该是16字节;在LP64中,应该是32!因为此时long/char *的对齐字节都变为8,为了保证满足对齐要求,i/k都被扩展为8字节了,又例如:[cpp] view plain copy1.struct T2.{3.char *p;4.long j;5.int i;6.int k;7.};此时,无需扩展,sizeof(T)=8+8+4+4=24.5、注意union例如:[cpp] view plain copy1.union U2.{3.double _d;4.long _l[2];5.};在ILP32中,两者大小相同都是8字节;移植到LP64,前者不变,后者为16字节,应改为:[cpp] view plain copy1.union U2.{3.double _d;4.int _l[2];5.};6、注意移位操作无类型的整数常量就是(unsigned) int 类型的,这可能会导致在位移时出现被截断的问题。

64位下怎样运行32位软件

64位下怎样运行32位软件

运行 32 位程序在WOW 64 子系统使32 位程序,能够在基于x 64 的版本的Windows Server 2003 和Windows XP Professional x64 Edition 上运行而无需进行修改。

在 WOW 64 子系统执行此x 64 版本的 Windows Server 2003 和 Windows XP Professional x64 Edition 创建32 位环境。

有关在WOW 64 子系统,请参阅Mi crosoft 平台SDK 文档64 位 Windows 部分中的"正在运行32 位应用程序"主题。

若要查看此文档,请访问下面的 Microsoft Web 站点:http://m sdn2.m /en-us/library/aa384249.aspx回到顶端程序性能注意事项在基于x 64 的版本的 Windows Server 2003 和Windows XP Professional x64 Edition 上,在 WOW 64 子系统创建32 位环境。

某些32 位程序可能较慢上运行这些操作系统比32 位版本的Windows Server 2003 和 Windows XP 中那样。

是例如一个32 位程序可能运行速度较慢在Windows XP Professional x64 Edi tion Mi crosoft Windows XP Professional 上比。

或者,需要大量内存可能会出现的某些32 位程序增加了在基于x 64 的版本的Windows Server 2003 和 Windows XP Professional x64 Edition 上的性能。

此性能增加的原因,基于x 64 的版本的Windows Server 2003 和Windows XP Professional x64 Edition 支持比32 位版本的Windows Server 2003 和Windows XP Professional 的更多的物理内存。

怎样在64位WIN7下配置WIN32汇编编辑器Radasm

怎样在64位WIN7下配置WIN32汇编编辑器Radasm

怎样在64位WIN7下配置WIN32汇编编辑器Radasm简介32位汇编语言作为低级语言,是很多高校计算机专业的必修课程之一。

其拥有可以直接访问硬件,执行速度快等优点。

RadASM作为一款著名的WIN32汇编语言编辑器,拥有丰富的插件和较强的工程管理功能,是学习WIN32汇编编程的实用工具。

鉴于32位hla(高级汇编语言)的特殊性,使用Radasm编写hla会在WIN7 64位出现较多问题(编译出错,中文支持不好等)。

现在教会大家如何在64位win7下安装和配置基于Radasm编辑器的hla编程环境。

工具/原料∙32位汇编语言编辑器RadASM.v2.2.1.9∙hla.v1.98(对中文兼容性较好)∙masm32步骤/方法1.将下载好的masm32压缩包解压,得到的整个文件夹拷贝至C盘根目录。

2.双击安装hla.exe,同样地,必须也安装到C盘根目录下。

3.完成之后,右击计算机-属性-高级系统设置-环境变量,查看系统变量,其中的三项如果如图所示的一样,证明安装hla成功,配置也是正确的。

4.双击安装RadASM.v2.2.1.9,由于步骤一已经复制了masm32至C盘根目录,所以安装时masm32选项不要勾选,对于hla而言,只需要勾选“文件关联”一项,如图所示。

安装目录同样选择C盘根目录,确保安装完成之后RadASM.exe在C:\RadASM。

5.双击桌面的Radasm图标或者C:\RadASM\目录下的RadASM.exe进入程序。

工具栏点击:文件-新建工程,编译器选择hla,类型选Console APP,填好工程名,使用hel lo world的模板。

6.新建的工程完成了,试着编译并运行,如图,运行成功得到结果。

7.点击工具栏:选项-语言,选择简体中文。

然后是环境变量,发现了没,Radasm安装时自动把环境变量和路径设置为基于C盘根目录的,这也是之前的步骤为什么必须把masm32以及hla安装于C盘根目录的原因。

64位系统能装32位的软件吗

64位系统能装32位的软件吗

64位系统能装32位的软件吗在电脑操作系统中,64位和32位是常见的两种架构,它们在处理数据时有所不同。

64位系统使用64位的寄存器和指令集,可以同时处理更多的数据,提供更高的计算性能和更好的安全性。

而32位系统则使用32位的寄存器和指令集,对于较低配置的计算机和旧版软件兼容性更好。

所以,一台64位系统的电脑能否安装和运行32位的软件是一个常见的问题。

大多数64位系统大都具备兼容32位软件的能力。

这是因为在64位系统中,操作系统会提供一个名为WoW64(Windows on Windows 64)的子系统,用于运行32位应用程序。

WoW64子系统可以提供一个兼容层,使得32位软件能够在64位系统上正常运行。

在Windows操作系统中,如果您的电脑是64位系统,您可以通过安装32位的兼容层来支持运行32位软件。

这个兼容层可以在下载和安装软件时自动完成,您只需要运行安装程序,它会自动检测您的系统架构并安装相应的组件。

虽然大多数64位系统都可以运行32位软件,但也有一些例外情况。

特定的软件开发商可能没有提供适用于64位系统的32位版本软件,或者某些旧版本的软件可能不再受到官方的支持。

在这些情况下,您可能无法在64位系统上安装和运行这些软件。

尽管如此,绝大多数常见的软件应用程序,无论是办公软件、图像编辑工具、媒体播放器还是游戏,都具备64位和32位两个版本。

因此,只需要确保您下载和安装的是与您系统架构匹配的版本即可。

在大多数情况下,64位系统能够完美地安装和运行32位软件,而且不会出现兼容性问题或性能下降。

需要注意的是,64位系统可以运行32位软件,但32位系统无法运行64位软件。

这是因为64位系统的处理器架构和指令集比32位系统更先进,32位系统无法充分利用64位处理器提供的性能和功能。

总结起来,64位系统能够安装和运行32位软件。

而在选择软件时,只需要确保您下载和安装的是与您系统架构匹配的版本即可。

64位Win10系统如何运行32位程序,看了这篇文章,我彻底明白了

64位Win10系统如何运行32位程序,看了这篇文章,我彻底明白了

64位Win10系统如何运行32位程序,看了这篇文章,我彻底明白了windows系统目录包含许多占用几千兆字节的目录,其中之一是SysWOW64。

WoW64 (Windows On Windows64 )是一个Windows操作系统的子系统,被设计用来处理许多在32-bit Windows和64-bit Windows之间的不同的问题,使得可以在64-bit Windows中运行32-bit程序。

一、SysWOW64文件夹位置几乎所有操作系统都安装在C:\分区上,SysWOW64目录位于C:\Windows文件夹中。

如果你在资源管理器中路径框中输入%WINDIR%\SysWOW64,就可以在任何一台计算机上访问到该目录,即使操作系统安装在另一个磁盘上也是如此。

它只适用于64位版本的Windows 10。

我们知道,电脑上使用的程序分为32位和64位两种,不同的程序运行时所需的系统文件是不同的。

Windows系统的主要系统文件都是放在C:\Windows目录下一个叫做System32的文件夹中的。

为了能同时放下两套系统文件,Windows会在64位的系统上,增加了一个文件夹,叫SysWow64。

二、SysWOW64文件夹中存储什么?SysWOW64是一个服务目录,其中存储了系统应用程序、硬件驱动程序、用于软件操作的动态库。

可能很多人注意到C:\分区中有两个目录:C:\Program Files(x86) - 这里安装了32位版本的程序。

C:\Program Files - 存储64位版本的应用程序。

存储动态加载的库(具有dll扩展名的文件,由许多应用程序使用),硬件驱动程序,系统实用程序以类似的方式组织:System32包含用于以64位模式运行程序的对象。

在SysWOW64中,用于在兼容模式下在64位操作系统上运行32位程序。

提示:SysWOW64是一个子系统,允许你在64位版本的操作系统上运行32位应用程序(所谓的向后兼容性)。

32位应用程序到64位应用程序的迁移

32位应用程序到64位应用程序的迁移

将程序移植到64位Windows雷立辉整理简介:本文对如何将32位Windows程序平滑的支持和过渡到64位Windows操作系统做出了一个简单而系统的介绍。

包括对于64位操作系统的版本,编程模型,一些移植原则甚至包括对驱动程序的移植原则的介绍。

作者介绍:系统分析员,现在在北京工作。

作者的blog:. 前言:或许大家还对32位的CPU及操作系统使用还是觉得非常的合乎日常需要,但Windows 64位已经悄悄的来到了各位的身边。

不少软件厂商也纷纷宣称自己的软件已经支持64位操作系统了。

笔者在几个月之前就成功的实施了一个软件的64位操作系统移植。

大致方案是,上层应用程序仍然使用32位程序,但将该系统软件的驱动程序统统的变成了64位。

这也是让应用程序支持64位的最小代价。

整个过程前后不到一个月(两个人月),就解决了大部分问题。

而一些难啃的骨头都是因为以前的编码不太规范而引起的。

因为这不是本文的主题,所以就此打住。

下面的内容就是我在工作过程中整理各种资料所得到的成果。

为了文章的系统性,中间转贴了一些MSDN中文网站的内容。

希望能对大家的工作有所帮助。

一.最有可能受益于64位的应用l需要大量的可寻址内存,因而系统总体内存需求超过4GB 的应用。

例如那些采用大型数据集的应用(金融和科学建模软件)和基于主机的桌面应用(在不降低性能的情况下同时运行多个线程);l必须同时管理大量的用户或者应用线程,例如大规模的瘦客户端解决方案,大型数据库,以及用于客户关系管理(CRM)、供应链管理(SCM)、企业资源规划(ERP)和数字版权管理(DRM)系统中的解决方案的数据仓库应用;l需要通过实时加密和解密提高安全性的应用,包括电子商务应用和对专用或者分类数据的保护;l需要数学精度和浮点性能的应用,包括建模、模拟、统计和金融分析、图像/视频/信号处理、物理、医学研究、远程通信、加密和压缩;l需要大规模的、强大的数据库性能的应用,包括决策支持,搜索和索引,文档和内容管理,以及语音识别;l需要64 位计算的大内存寻址功能的应用,包括很多高性能计算(HPC)群集应用;l需要提供数字内容创建功能,例如计算机辅助设计、制造和工程(CAD、CAM 和CAE)、数字音乐制作和视频编辑,以及实时媒体流解决方案;l需要通过最大限度的性能实现逼真的影院级消费者体验,包括计算机游戏、数字视频和协作;l需要将以前只限于64 位工作站的功能移植到企业、消费者和计算机爱好者的台式机中,包括3D 建模、渲染、动画、模拟和软件开发。

教你如何在64位WIN7系统下配置汇编软件并运行汇编程序

教你如何在64位WIN7系统下配置汇编软件并运行汇编程序

64位WIN7系统如何使用汇编软件并运行汇编程序有很多同学使用的都是64位的windows系统,但是会发现有很多软件不支持64位系统,特别是学习汇编语言的同学,更是烦恼。

要做汇编实验却发现64位的Win7系统没有Debug.exe调试程序,于是从Windows xp或32位win7系统上复制了一个debug.exe到自己的电脑上,却发现debug在64位的电脑上不兼容。

64位系统运行汇编后的exe程序结果如下:64位系统运行debug结果如下:然而,我们不能放弃对汇编的学习,因此特分享以下两种方法供学习汇编的同学们解决不兼容问题:一、 借助DOSBox;(1)软件要求:①DOSBox软件;②Debug调试程序(可以从Windows xp或32位win7系统电脑里复制,其所在路径应该是:C:\Windows\System32,找到debug.exe);③masm.exe;link.exe;ml.exe;ml.err:做汇编的四个小程序(最好能够从网上下载一个版本较高点的,这样能在自己的命令提示符里直接使用这四个程序,使用也就更方便);(2)开始安装:双击打开DOSBox软件,按步骤进行安装,安装目录任选,不过由于C盘是系统盘,所以最好安装在其他盘里;安装成功后打开DOSBox, 我们就可以看到一个非常熟悉的界面了,和电脑里的命令提示符DOS窗口差不多,界面如下:(注意:由于它的两个窗口是在一起作用的,所以使用的时候不要关掉其中的任一个窗口)安装完DOSBox后,我们就能运行汇编后的程序了(3)相关设置操作:①DOSBox相关设置打开DOSBox后,我们可以看到Z : \ >,这是DOSBox里的虚拟盘,我们可以采用mount命令将其转变到自己的D盘:mount d d:\myassembly这里,我在D盘建立了一个文件夹myassembly,作为自己做汇编实验的文件存放位置;使用该命令后,d符号也就虚拟成了自己本地电脑的d:\myassembly 目录;然后转换盘符就行了;但是,我们每一次打开DOSBox都要进行这两步有点麻烦,因此,我们也可以如下这样一步到位:开始——>所有程序——>DOSBox文件——>打开DOSBox 0.74 Options,在打开的文本里找到[autoexec](应该会在文本的最后位置),根据你自己做汇编实验的文件夹所在路径进行相应的设置,在;[autoexec]项的末尾写上上面的两条命令:以我的文件路径为例:这样在我们再次打开DOSBox时,就会直接加载上述命令;②debug设置把debug.exe放入我们之前设置的做汇编实验的文件夹目录下于是我们就可以在DOSBox下使用Debug调试程序如下:二、安装虚拟机;我们可以安装一个虚拟机,装上Windows xp系统。

如何让32位编译的程序在64位系统中正常运行

如何让32位编译的程序在64位系统中正常运行

如何让32位编译的程序在64位系统中正常运行
如何让32位编译的程序在64位系统中正常运行操作系统从32位步入64位,对于用户来说是质的飞跃。

由于CPU读取数据宽度增加1倍,速度和精度都带来了跨跃。

同时,CPU的读写方式的改变,对于程序员来说,需要适应跟进。

虽然,64位系统支持32位程序,但是是有条件的,因为系统对CPU的操作有所变化,有的有32位上操作,就不能在64位在操作了。

比如,软件通过调用底层,通过汇编读写数据的源程序,在32位上运行自如,在64位上就出现问题,执行出错。

在开发工具方面,基于Java、.NET的工具可以很顺利地支持64位平台。

因为,它们不通过调用底层实现代码,而是基于.Net调用实施。

对于Delphi来说,由于它是与操作系统紧密相关的,与它代码,最终实现“32位程序可以在64位系统正常运行”的目的。

下面是笔者,初步实践,仅供同仁参考:
1、对于涉及到ASM代码的单元进行修改,采用API取代;
2、对于一些引用的读写硬件的单元,多数采用ASM代码,取消引用该类单元;
3、尽可能不使用第三方控件。

特别是,无源代码的第三方控件。

(内含ASM 代码)
4、修改后的读写硬件的单元,要分别在64位机器中,调试。

主要验证:
(1)可以运行(支持代码)。

(2)返回值32位与64位一致。

通过,上述代码改进。

编译后的程序。

在64位上正常运行。

win764位系统如何运行32位程序

win764位系统如何运行32位程序

win764位系统如何运行32位程序
win7 64位系统如何运行32位程序
现在,绝大多数的新电脑都在使用支持64位计算技术的CPU了。

与以前基于x86技术构架的32位计算技术相比,64位技术对系统资源的使用效率更高,性能也更高。

那么win7 64位系统如何运行32位程序呢?小编为大家分享了win7 64位系统运行32位程序的方法,下面大家跟着店铺一起来了解一下吧。

win7 64位系统运行32位程序方法
win7 64位为32位程序提供了兼容模式,以保障多数32位程序可正常运行,设置方法如下:
1、在该程序快捷方式上右击,点击属性;
2、点击兼容性选项卡,点击勾选以兼容模式运行这个程序;
3、从组合框选择合适的操作系统,最后点击确定即可。

VC移植32位程序到64位系统方法

VC移植32位程序到64位系统方法

如何移植32位程序到64位系统一.简单介绍64个系统已经为32位的应用程序准备了运行32位程序的环境,这个环境就是WOW64的WOW64 是Windows -32-on-Windows-64 的缩写。

它为现有的32 位应用程序提供了32 位的模拟,可以使大多数32 位应用程序在无需修改的情况下运行在Windows 64 位版本上。

它类似于旧的WOW32子系统,负责在Windows 32 位版本下运行16 位的代码。

WOW64的是视窗- 32上的Windows - 64的缩写。

它为现有的32位应用程序提供了32位的模拟,可以使大多数32位应用程序在无需修改的情况下运行在64位版本的Windows上类似于旧的WOW32 子系统,负责在的Windows 32位版本下运行16位的代码。

64 位版本Windows 中的注册表分为32 位注册表项和64 位注册表项。

许多32 位注册表项与其相应的64 位注册表项同名,反之亦然。

64 位版本Windows 包含的默认64 位版本注册表编辑器(Regedit.exe) 可显示64 位和32 位的注册表项。

WOW64 注册表重定向器为32 位程序提供了对应于32 位程序注册表项的不同注册表项。

下面介绍一点编程中要用到的东西。

1.当然,这里你还必须用到一个就是,如何判断系统是32位系统还是64位系统呢?如果你要用小改变是必须知道现在到底是32,还是64。

IsWow64返回TRUE则是64位系统,否则为32位系统。

code如下:VC测试通过typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);LPFN_ISWOW64PROCESS fnIsWow64Process;BOOL IsWow64(){BOOL bIsWow64 = FALSE;fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process");if (NULL != fnIsWow64Process){if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64)){// handle errorAfxMessageBox("IsWow64 error!");}}return bIsWow64;}2.在64 位版本的注册表编辑器中,32 位注册表项显示在以下注册表项下:HKEY_LOCAL_MACHINE\Software\WOW6432Node使用默认的64 位版本注册表编辑器,可以查看或编辑64 位和32 位的注册表项和项值。

64位WIN系统下64位与32位的python共存之法

64位WIN系统下64位与32位的python共存之法
行如下命令
1 pyinstaller -F xxx.py
需要注意:上述命令中 -F 此处必须为大写的F,同时,必须在命令行状态下进入 xxx.py 所在 文件夹下执行上述命令,生成的EXE文件会出现在同目录 dist 文件夹内 ; 如果想这样使用该命令,如下图(不建议这样使用)
接下来,开始今天的正文,安装32位版本的pyt hon3.7、pyinst aller
从 www.pyt (pyt hon官网)下载32位的pyt hon3.7版本
下载完成后,使用默认安装即可,记得勾选可选框; C:/Users/Administ rat or/AppDat a/Local/Programs/Pyt hon/ 文件夹下,会出现如下图所 示:
Pyt hon38为原来的64位版本,红色框内的 Pyt hon37-32为刚安装好的32位的Pyt hon;
下面重点来了,如何设置32位版本,使之可以与64位版本共存且正常使用
进入Pyt hon37-32 文件夹内,⻅下图中红框中文件,
修改其名称,可随意修改,我修改为下图所示,在原名称后加数字2
接下来,安装对应版本的pyinst aller前 ,需先行安装 pywin32 从 ht t ps://www.lf /~gohlke/pyt honlibs/ 网⻚,搜索 pywin32 的32位版本,下载 后安装
下载后,放至 C盘根目录,运行CMD执行如下命令 1 python2 -m pip install C:/pywin32-228-cp37-cp37m-win32.whl
注意此处使用的命令为 pyt hon2 而非 pyt hon , 还记得上面32位版本改的名字吧,很重要 哟 1 python2 -m pip install pyinstaller 成功安装后,在 C:/Users/Administ rat or/AppDat a/Local/Programs/Pyt hon/Pyt hon37-32 文件夹下,会出现 Script s 文件夹,进入后如下图所示:

实现让易语言编译的32位程序在64位Windows7系统非管理员帐户中执行

实现让易语言编译的32位程序在64位Windows7系统非管理员帐户中执行

实现让易语⾔编译的32位程序在64位Windows7系统⾮管理员帐户中执⾏昨天有易语⾔开发者向我求助,说他⽤易语⾔编译的32位程序软件,发布给64位操作系统Win 7⽤户使⽤,因为该⽤户确定没有管理员权限,⽽程序启动时⼜要求必须输⼊管理员密码,如此陷⼊困境。

⽬标企业⽤户管理严格,要求为普通⽤户分配管理员权限是不切实际的,只能开发⼈员从软件开发的⾓度在技术上解决。

我听到这个问题后,第⼀感觉是微软⽤户帐户控制(UAC)引发的,估计通过给 exe 添加特定的 manifest 资源应该可以解决。

于是我给了他⼀段代码,让他⽤ ResHacker 之类的软件添加到软件⾥⾯去,试⼀试能不能解决问题:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"><trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"><security><requestedPrivileges><requestedExecutionLevel level="asInvoker" uiAccess="false" /></requestedPrivileges></security></trustInfo></assembly>结果测试之后他发现,⾮常成功的解决了问题。

修改后的软件发布给⽤户测试,启动时也不再提⽰输⼊管理员密码了,功能⼀切正常。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何让32位编译的程序在64位系统中正常运行操作系统从32位步入64位,对于用户来说是质的飞跃。

由于CPU读取数据宽度增加1倍,速度和精度都带来了跨跃。

同时,CPU的读写方式的改变,对于程序员来说,需要适应跟进。

虽然,64位系统支持32位程序,但是是有条件的,因为系统对CPU的操作有所变化,有的有32位上操作,就不能在64位在操作了。

比如,软件通过调用底层,通过汇编读写数据的源程序,在32位上运行自如,在64位上就出现问题,执行出错。

在开发工具方面,基于Java、.NET的工具可以很顺利地支持64位平台。

因为,它们不通过调用底层实现代码,而是基于.Net调用实施。

对于Delphi来说,由于它是与操作系统紧密相关的,与它代码,最终实现“32位程序可以在64位系统正常运行”的目的。

下面是笔者,初步实践,仅供同仁参考:
1、对于涉及到ASM代码的单元进行修改,采用API取代;
2、对于一些引用的读写硬件的单元,多数采用ASM代码,取消引用该类单元;
3、尽可能不使用第三方控件。

特别是,无源代码的第三方控件。

(内含ASM 代码)
4、修改后的读写硬件的单元,要分别在64位机器中,调试。

主要验证:
(1)可以运行(支持代码)。

(2)返回值32位与64位一致。

通过,上述代码改进。

编译后的程序。

在64位上正常运行。

相关文档
最新文档