我习惯于使用Win32Ada库为我为Windows创建的终端程序调用系统调用。系统调用足以实现对控制台的控制,但是Ada标准库中没有任何功能。检查GPS社区版的来源列表后,我发现Win32Ada丢失了。我准备继续使用Win32Ada,但是它的排除(如几年前针对Linux构建的POSIX排除的情况)暗含着一种更好的方法来实现低级接口(interface)。谁能给我最简单的代码或引用,以我现在可以支持的方式与Windows进行交互?

之前的示例:

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

最佳答案

我不确定从GNAT Community Edition中排除win32ada库是否意味着它已过时。该库仍可在GitHub上使用,并且自述文件中未提及任何过时之处。您可能只需要自己克隆,构建和安装它。

还要注意,win32ada似乎针对32位以及64位Windows。据我所知,32位和64位Windows之间的差异归结为所使用的指针的大小。这些指针由 ULONG_PTR 中定义的LONG_PTRwin32.ads类型表示,它们的大小使用 Standard'Address_Size 定义; GNAT公开的属性。此外,例如在提到针对32位或64位Windows时,win32ada链接到名称为32的user32.dllgdi32.dll之类的文件是无关紧要的。这个post

话虽这么说,您也可以选择检查GNAT.OS_Lib。该软件包包含与各种OS相关功能的抽象(另请参见GPS IDE中的“帮助> GNAT运行时> GNAT> OS_Lib”)。依赖于此软件包而不是win32ada,可能会使您的程序在操作系统之间更易于移植。

09-28 11:51