如何以64位GNAT GPS的新方式与Windows系统调用接口?

时间:2019-04-19 19:26:04

标签: windows ada gnat-gps

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

之前的示例:

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

3 个答案:

答案 0 :(得分:3)

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

还请注意,win32ada似乎同时针对32位和64位Windows。据我所知,32位和64位Windows之间的差异归结为所使用的指针的大小。这些指针由win32.ads中定义的类型ULONG_PTRLONG_PTR表示,其中它们的大小是使用Standard'Address_Size定义的; GNAT公开的属性。此外,对于目标为32位或64位Windows的情况,win32ada链接到名称为数字{32}的文件user32.dllgdi32.dll的事实是无关紧要的。例如这个post

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

答案 1 :(得分:1)

您可以看一下Ada的Visual Studio插件Visual Ada,该插件对Windows 64具有一些UWP支持

Visual Studio Community edition是免费的。

如果您真的想使用win32ada,则可能必须联系AdaCore,看看他们是否支持其付费版本,或者坚持使用GNAT GPL 2017随附的Windows 32位版(仍然是{{3} }。您可以将其与downloadable上更新的Ada编译器配对,该编译器同时维护64位和32位版本的GNAT。

答案 2 :(得分:1)

看看在GWindows中是如何完成的:整个框架都针对Win32和Win64构建。尤其是,您将在GWindows软件包中找到。键入如何自动完成32位和64位检测:

   type Handle is new System.Address;
   Null_Handle : constant Handle := Handle (System.Null_Address);
   type Wparam is mod 2 ** Standard'Address_Size;
   type Lparam is new Wparam;
   type Lresult is new Wparam;