【发布时间】:2013-08-08 23:41:54
【问题描述】:
我正在用 Delphi 编写一个程序,其中包括一个包含一些汇编代码 (Pipes.pas) 的库。当我运行调用一个名为 StdWndProc 的函数的代码时,我遇到了访问冲突。该过程是一个包含汇编代码的汇编函数。
不久前我更新了这段代码 (Pipes.pas) 以包含 unicode 支持和其他内容,但我不知道这个程序集在做什么。关于这里出了什么问题的任何想法?
我在 64 位机器上运行,可能是这个程序集是 32 位的,在 64 位处理器上运行不正确(该项目针对 32 位构建)。
【问题讨论】:
-
如果您正在为 32 位应用程序编译,32 位程序集应该可以正常工作,因为 Delphi RTL 的主要部分在 32 位目标中使用 32 位程序集。如果您的目标是 64 位构建并尝试使用 32 位库,这显然不起作用。你能edit你的问题提供你得到的确切错误信息吗? “我遇到了访问冲突”完全含糊不清,无法使用。
-
我非常怀疑...您使用哪个版本的 Delphi 来编译您的代码?和你用来创建代码的一样吗?请注意,在 Delphi 2009 中,Unicode 支持成为默认选项,因此将旧的 Delphi 代码迁移到 2009 之后的版本需要一些额外的工作。有关这方面的更多信息,请参阅link
-
请在您使用的 Delphi 版本上包含一个标签。如果可能,还要更具体地说明您的问题:在什么情况下会崩溃,以及在什么情况下可以正常工作。
pipes.pas是你自己写的,还是只改? -
我唯一一次遇到在 64 位操作系统上运行 32 位代码的问题……是在进行一些 Windows 安全 API 调用时……当 Windows 更改了底层数据结构(从 32 位到 64 位结构)但没有给出任何发送或更改数据结构的方法...support.microsoft.com/kb/920754