首页 > 解决方案 > 如何以 64 位 GNAT GPS 的新方式与 Windows 系统调用交互?

问题描述

我习惯于使用 Win32Ada 库为我为 Windows 创建的终端程序调用系统调用。系统调用足以实现对控制台所需的控制,但 Ada 标准库中没有。检查 GPS 社区版的来源列表,我发现 Win32Ada 不见了。我准备继续使用 Win32Ada,但它的排除暗示了它(就像几年前 Linux 构建的 POSIX 排除的情况一样),有一种更好的方法来实现低级接口。谁能给我最简单的代码或参考我如何以从现在开始支持的方式与 Windows 交互?

之前的例子:

pragma Ada_2012;
with Win32;
with Ada.Text_IO;
...

标签: windowsadagnat-gps

解决方案


我不确定win32ada从 GNAT 社区版中排除该库是否意味着它已经过时。该库仍然在GitHub 上可用,并且在 README 文件中没有提到过时。您可能只需要自己克隆、构建和安装它。

另请注意,这win32ada似乎针对 32 位和 64 位 Windows。据我所知,32 位和 64 位 Windows 之间的区别归结为所使用的指针的大小。这些指针由类型表示,ULONG_PTR并在使用;LONG_PTR定义win32.ads其大小的位置定义 。Standard'Address_SizeGNAT 公开的属性。此外,如本文所述,当涉及到针对 32 位或 64 位 Windows 时,win32ada链接到名称中带有数字 32 之类的文件user32.dll是无关紧要gdi32.dll

话虽如此,作为替代方案,您可能还想检查GNAT.OS_Lib. 该软件包包含对各种 OS 相关设施的抽象(另请参见 GPS IDE 中的“Help > GNAT Runtime > GNAT > OS_Lib”)。依赖于这个包而不是win32ada可能使您的程序在操作系统之间更具可移植性。


推荐阅读