【问题标题】:Is Borland delphi 5 compatible with Windows 2012 servers?Borland delphi 5 是否与 Windows 2012 服务器兼容?
【发布时间】:2015-10-03 06:37:56
【问题描述】:

我们正在 windows 2003 R2x64 位服务器操作系统上开发 borland delphi 5。

现在我们要把我们的Windows OS从2003升级到2012。我想知道borland delphi 5版本是否兼容windows 2012 server OS。

提前致谢

手动约瑟夫

【问题讨论】:

  • 如前所述,是的,您可以。但是,这也取决于您的应用可能使用的 Windows API 调用,以及您的应用可能使用的任何驱动程序。
  • 正如@JerryDodge 所说...API 是问题所在...我记得在一些Windows 安全API 上工作...并且没有办法让它在32 位下工作...因为 MS 有一个包含 64 位数据类型的内部结构,并且无法将值传递给这个内部数据结构......但如果你不做任何奇怪的事情......你应该没问题......
  • @House 您可以在 32 位进程中处理 64 位数据
  • @David 是的,您可以...但是如果您无法访问 64 位数据,您就不能...即没有属性可以访问它的内部数据结构...这是一个用于访问安全令牌的 MS 代码中的错误,您需要获得更高的权限,您传递数据后的 API 执行了 sizeof,当然它失败了,因为它们在内部将其存储为 64 位,但您无法访问它...... MS解决方法是编译为 64 位。不记得 API 调用了,但我在大约 2 年前撞到了它……

标签: delphi delphi-5


【解决方案1】:

Delphi 5 生成可在任何 32 位或 64 位版本的 Windows 上运行的可执行文件。所以是的,Delphi 5 可以生成与 Windows 2012 服务器兼容的可执行文件。

【讨论】:

  • 补充一点,它可以在 Windows 64bit 上运行,但只能在其 32bit 模拟器中运行。 Delphi 5 无法编译原生 64 位应用程序。
  • @JerryDodge AFAIK 这不是一个“模拟器”,而是一个 API 翻译器,在每次调用期间以 32 位模式切换的 CPU 中执行。没有仿真,只是使用低级 CPU 技巧,以及一些 API 级别的管道。见en.wikipedia.org/wiki/WoW64
  • @ArnaudBouchez 微软不同意。他们sayWOW64 是 x86 模拟器,它允许基于 32 位 Windows 的应用程序在 64 位 Windows 上无缝运行。 更多内容请点击此处:msdn.microsoft.com/en-us/library/windows/desktop/aa384274.aspx
  • @DavidHeffernan 请进一步阅读:WOW64 已交付并记录为emulator,但在 x64 CPU 上运行时并非如此。在 Itanium 下,它模拟 CPU,但在 x64 下,它不emulate 任何东西,而是直接在 CPU 中转换 API 调用并执行 x86 代码,使用 没有仿真。就像wine 一样,我们可以创建一个 WOINE 递归首字母缩略词: WOW64 On Intelx64 is Not an Emulator。 :)
  • @ArnaudBouchez 显然您对模拟器的定义与微软的不符。我认为您不能就该词的含义声称权威。根据您的定义,WOW64 不是模拟器。 WOW64是微软定义的模拟器。
【解决方案2】:

Delphi 5 应用程序是 32 位应用程序,使用 Win32 API,可在 Windows Server 2012 上运行。

但是关于你的申请:

  • 作为编译器,Delphi 5 应用程序可以在 Windows Server 2010 上运行;
  • 您必须检查所有第三方组件(视觉或数据库);
  • 请注意,自 Vista 和 Windows Server 2008 以来,系统级期望确实发生了变化(例如 how the common folders work);
  • 另请注意,您的 VCL UI 默认不会设置主题,并且可能有一些refreshing issues

即将推出的Nano Server 版本的 Windows 2016 将仅提供 Win64 API,并且不再允许执行 32 位代码。因此,您将无法在 Nano Server 中运行 Delphi 5 应用程序 - 即使 Windows 2016(及其完整的 API 和 GDI)被告知仍与 Win32 兼容 - 所以 Delphi 5 兼容。

【讨论】:

  • 等等,这是否意味着 Windows Server 2016 正在引入 128 位?因为每个版本的 windows 一直都支持之前的位元模拟器。
  • 此外,Server 2003 与 XP 相当。你为什么声称它与Vista具有相同的兼容性? Vista 相当于 Server 2008,而 Windows 7 相当于 Server 2008 R2。就像 Windows 8 相当于 Server 2012。
  • @Jerry 问问自己 128 位硬件在哪里?
  • @JerryDodge 我打错了。是的,WS2008 破坏了 WS2003 的兼容性,就像 Vista 破坏了 XP 关于文件夹的兼容性一样。
【解决方案3】:

在大多数情况下,如果您的应用程序纯粹使用 Delphi 内置的东西,那么您应该不会有任何问题。 Delphi 自动使用 Windows API 来向后兼容。因此,如果您有一个仅使用 Delphi 提供给您的东西的非常简单的应用程序,那么您的应用程序很可能可以在任何(当前)版本的 Windows 中运行。

另一方面,如果您的应用使用任何直接的 Windows API 调用,或者如果它使用其他第三方库(例如需要额外 DLL 的库),那么您可能需要升级。

窗体应用程序的 Windows 控件非常标准,可以适应所有版本的 Windows - 甚至可以自动设置样式以适应您正在使用的任何版本的 Windows。但是,如果您有任何第三方自定义控件,或任何直接访问 Windows API 的东西,那么您需要确保这些调用是兼容的。

在使用 Windows API 时,可以安全地假设 大多数 调用是向后兼容的。微软在这方面做得很好。同样,如果使用 Delphi 中可用的标准组件/控件,而不是直接访问 Windows API,那么您应该是安全的。

对于 32/64 位应用程序...每个版本的 Windows 都支持以前的位版本的模拟器。因此,例如,所有 64 位版本的 Windows 都支持运行 32 位应用程序。同样,所有 32 位版本的 Windows 都支持运行 16 位应用程序。这种支持是通过一个仿真器 (WOW64) 实现的,允许进一步支持向后兼容性。

最后,只要您的应用程序纯粹使用 Delphi 为您提供的内容,并且您没有导入任何额外的第三方库,那么您应该可以安全使用。我会说98%的保证。另外 2% 与您的应用是否使用依赖于特定 32 位库的任何内容有关。

对于第三方库,经验法则是确保库供应商声称他们支持您正在使用的 Delphi 版本。但这并不总是意味着它可以与 64 位一起使用。例如,直接使用驱动程序的东西也必须确保支持 32 位或 64 位驱动程序。

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多