在 Delphi 中查看 Windows.pas,我看到有几个签名作为 LoadLibrary (A) 或 (W)
用于加载特定模块。它们之间有什么区别?我是否可以相信始终为所有类型的 Windows 平台调用 LoadLibrary?
最佳答案
Windows API 提供 ANSI 字符串 (A
) 或 Unicode 字符串 (W
)。在内部,Windows API 都可用。但是,Delphi 默认为其中之一,具体取决于 Delphi 的版本。许多其他 Windows 语言也这样做。该语言默认使用 ANSI 或 Unicode 字符串。
在 2009 年之前的 Delphi 版本中,使用 ANSI API 调用,后缀为 A
。那是 Delphi 主要使用 ANSI 字符串的时候。从 Delphi 2009 及更高版本开始,已强制执行 Unicode。这也对 Unicode 进行了默认 API 调用,后缀为 W
。 Unicode 一直在 Delphi 中得到支持,但从 2009 年开始,它已被强制执行为默认值,优于 ANSI。在那些旧版本中,LoadLibrary
等函数映射到 ANSI 版本 LoadLibraryA
。
您提到的特定 API 调用 LoadLibrary
可作为 LoadLibraryA
或 LoadLibraryW
使用。 Windows.h
还提供了一个通用的 LoadLibrary
函数,它在内部使用首选的 Unicode 版本。 A
和 W
的区别为开发人员提供了向后兼容的选项,就像 Microsoft 的许多产品一样。如果语言主要是 ANSI 字符串,您可以明确使用 Unicode。或者,如果语言主要是 Unicode,您可以明确使用 ANSI。
长话短说,Windows 本身一度默认从 ANSI 字符串切换到 Unicode 字符串。但是仍然提供向后兼容性。后来的 Delphi 版本已更改为使用任何首选默认值 - 在本例中它们是 Unicode。
总结:
- LoadLibraryA - 通过 ANSI 字符串加载库
- LoadLibraryW - 通过 Unicode 字符串加载库
- LoadLibrary - 使用首选默认值(Unicode 字符串)加载库
- Windows 的古代版本在引入 Unicode 之前仅使用 ANSI 字符串
- Windows 通过默认为 ANSI 版本提供向后兼容性 - 但最终将默认设置切换为 Unicode(不确定是哪个版本)
您可以了解更多关于 Microsoft's introduction of Unicode here 的信息以及here .
关于windows - Delphi 中的这些 Windows API 签名有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699776/