首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在64位GNAT GPS的新方式下与Windows系统调用接口?

问如何在64位GNAT GPS的新方式下与Windows系统调用接口?
EN

Stack Overflow用户
提问于 2019-04-20 03:26:04
回答 3查看 319关注 0票数 2

我习惯于使用Win32Ada库来调用我为Windows创建的终端程序的系统调用。系统调用足以在控制台上实现所需的控制,但Ada标准库中的任何内容都无法实现。检查GPS社区版的源码列表,我发现Win32Ada丢失了。我已经准备好继续使用Win32Ada,但是它的排除(几年前Linux版本的POSIX排除就是这种情况)暗示着有一种更好的方法来实现低级接口。有没有人能给我最简单的代码或参考资料,告诉我从现在起我将如何以支持的方式与Windows交互?

前面的示例:

代码语言:javascript
复制
pragma Ada_2012;
with Win32;
with Ada.Text_IO;
...
EN

回答 3

Stack Overflow用户

发布于 2019-04-20 06:29:27

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

还要注意的是,win32ada的目标似乎是32位和64位Windows。据我所知,32位和64位Windows之间的区别归结为所使用的指针的大小。这些指针由win32.ads中定义的类型ULONG_PTR和LONG_PTR表示,其中它们的大小是使用Standard'Address_Size定义的;这是一个由GNAT公开的属性。此外,win32ada链接到名称中带有数字32的user32.dll和gdi32.dll等文件的事实与针对32位或64位Windows无关,例如在本post中提到的那样。

也就是说,作为替代,您可能还想检查一下GNAT.OS_Lib。这个包包含对各种操作系统相关工具的抽象(另请参阅GPS中的"Help > GNAT Runtime > GNAT > OS_Lib“)。依赖这个包,而不是win32ada,可能会使您的程序在不同操作系统之间更容易移植。

票数 3
EN

Stack Overflow用户

发布于 2019-04-20 04:34:40

你可以看看Ada,Visual Ada的Visual Studio插件,它对Windows64有一些UWP支持

Visual Studio Community edition是免费的。

如果你真的想使用win32ada,那么你可能不得不联系AdaCore,看看他们的付费版本是否支持它,或者坚持使用GNAT GPL 2017提供的windows 32位版本(仍然是downloadable)。您可以将其与来自msys2的更新的Ada编译器配对,该编译器具有维护的64位和32位版本的GNAT。

票数 1
EN

Stack Overflow用户

发布于 2019-04-24 16:25:24

让我们看看GWindows是如何实现的:整个框架都是为Win32和Win64构建的。特别是,您将在GWindows.Types包中发现32位与64位检测是如何自动完成的:

代码语言:javascript
复制
   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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55766868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档