Delphi 32位汇编代码能否在64位处理器上运行?(德尔菲)

Delphi 32位汇编代码能否在64位处理器上运行?(德尔菲),delphi,assembly,Delphi,Assembly,我正在用Delphi编写一个程序,包括一个包含一些汇编代码Pipes.pas的库。当我运行调用StdWndProc函数的代码时,我遇到了访问冲突。该过程是一个包含汇编代码的汇编函数 不久前,我更新了这个代码Pipes.pas以包含unicode支持和其他内容,但我不知道这个程序集在做什么。你知道这里出了什么问题吗 我在一台64位机器上运行,可能是因为此程序集是32位的,并且在64位处理器上没有正确运行该项目的目标是32位构建。32位进程执行32位代码。不管这些代码是从汇编语言、Delphi还是其

我正在用Delphi编写一个程序,包括一个包含一些汇编代码Pipes.pas的库。当我运行调用StdWndProc函数的代码时,我遇到了访问冲突。该过程是一个包含汇编代码的汇编函数

不久前,我更新了这个代码Pipes.pas以包含unicode支持和其他内容,但我不知道这个程序集在做什么。你知道这里出了什么问题吗


我在一台64位机器上运行,可能是因为此程序集是32位的,并且在64位处理器上没有正确运行该项目的目标是32位构建。

32位进程执行32位代码。不管这些代码是从汇编语言、Delphi还是其他语言编译的

无论机器是64位还是32位,32位进程都运行32位代码。在64位机器上,32位进程在名为WOW64的模拟32位机器中运行

从概念上讲,您正在尝试的是可能的,因此结论是您的代码有一个bug。

正如David Heffernan指出的,您的问题的原因很难是操作系统架构

如果您的代码在32位机器上运行时没有错误,但在64位机器上运行失败,则可能是操作系统的问题。这可能是因为在64位windows上为32位程序使用了32位排他目录,如SD:\Program Files(称为SD:\Program Filesx86),注册表反射(使程序将注册表数据存储在WOW326节点项下),甚至使用了旧的16位DLL(不能在WOW326下运行),但这是一个非常罕见的案例,因为现在是2013年

为了能够提供帮助,我需要关于代码如何无法正确运行的更多详细信息


请注意,原来的问题已经回答了,我只想提供一些更有用的帮助。

如果您是为32位应用程序编译的,32位程序集应该可以正常工作。Delphi RTL的主要部分在32位目标中使用32位程序集。如果您的目标是64位构建并试图使用32位库,那么它显然不起作用。你能回答你的问题以提供你得到的确切错误信息吗?我得到了一个访问权限侵犯是完全模糊的,没有用处。我有一个可怕的怀疑。。。您使用哪个版本的Delphi编译代码?它与您用来创建代码的代码相同吗?注意,在Delphi2009中,Unicode支持成为默认选项,因此将旧的Delphi代码迁移到2009年之后的版本需要一些额外的工作。有关这方面的更多信息,请参见在您使用的Delphi版本上添加标签。如果可能的话,还要更具体地说明您的问题:在什么情况下它会崩溃,在什么情况下它能正常工作。您是自己编写pipes.pas还是只修改了它?我唯一一次遇到32位代码在64位操作系统上运行的问题…是在进行一些Windows安全API调用时…当Windows将基础数据结构从32位更改为64位结构时,但没有提供任何发送或更改数据结构的方法。。。