windows - Delphi 中的这些 Windows API 签名有什么区别?

标签 windows delphi winapi

在 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 可作为 LoadLibraryALoadLibraryW 使用。 Windows.h 还提供了一个通用的 LoadLibrary 函数,它在内部使用首选的 Unicode 版本。 AW 的区别为开发人员提供了向后兼容的选项,就像 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/

相关文章:

windows - 我要去哪里学习编写必须非常非常安全但确实暴露外部服务(在标准 Windows 或 Linux 操作系统上运行)的代码

delphi - 我可以让 TTreeNode 不可见吗?

delphi - Shell 函数的失败返回值

c++ - 无法更新控制台应用程序中的窗口

windows - 为什么 g++ 找不到/链接到 qjpeg4.dll?

android - 找不到Android支持库

delphi - 如何检查是否存在其他进程(超出我的)在由 CreateDesktop() 函数创建的新桌面内运行?

c++ - Delphi与C++dll通信(参数)

c++ - 在 C++ 中分区和格式化 USB 闪存驱动器时出错

c++ - 使用 WNDCLASSEX 创建窗口? [Cpp]