Как я могу взаимодействовать с системными вызовами Windows новым способом 64-битного GNAT GPS? - PullRequest
2 голосов
/ 19 апреля 2019

Я привык использовать библиотеку Win32Ada для вызова системных вызовов для терминальной программы, которую я создавал для Windows. Системных вызовов было достаточно для обеспечения контроля, необходимого для консоли, но ничего в стандартной библиотеке Ada не было бы. Изучив список источников издания GPS Community, я обнаружил, что Win32Ada отсутствует. Я готов продолжать использовать Win32Ada, но из-за его исключения (как и в случае с POSIX для сборки Linux много лет назад) подразумевается, что существует лучший способ достижения низкоуровневого интерфейса. Кто-нибудь может дать мне простейший код или ссылку на то, как я могу взаимодействовать с Windows так, как это будет поддерживаться с этого момента?

Пример раньше:

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

Ответы [ 3 ]

3 голосов
/ 20 апреля 2019

Я не уверен, что исключение библиотеки win32ada из GNAT Community Edition подразумевает ее устаревание. Библиотека по-прежнему доступна на GitHub , и в файле README не упоминается о ее устаревании. Возможно, вам просто придется клонировать, собрать и установить его самостоятельно.

Обратите внимание, что win32ada, похоже, предназначен как для 32-битной, так и для 64-битной Windows. Из того, что я знаю, разница между 32-битной и 64-битной Windows сводится к размеру используемых указателей. Эти указатели представлены типами ULONG_PTR и LONG_PTR, определенными в win32.ads, где их размеры определены с использованием Standard'Address_Size; атрибут, предоставляемый GNAT. Кроме того, тот факт, что win32ada ссылается на файлы, такие как user32.dll и gdi32.dll с номером 32 в их именах, не имеет значения, когда речь идет о 32-битной или 64-битной Windows, как упоминалось, например, в. этот пост .

При этом вы можете, в качестве альтернативы, также захотеть проверить GNAT.OS_Lib. Этот пакет содержит абстракцию к различным средствам, связанным с ОС (см. Также «Справка> Среда выполнения GNAT> GNAT> OS_Lib» в IDE GPS). В зависимости от этого пакета вместо win32ada может сделать вашу программу более переносимой между операционными системами.

1 голос
/ 24 апреля 2019

Посмотрите, как это делается в GWindows : весь фреймворк собирается как для Win32, так и для Win64. В частности, вы найдете в пакете GWindows.Types, как автоматическое обнаружение 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;
1 голос
/ 19 апреля 2019

Вы можете взглянуть на плагин Visual Studio для Ada, Visual Ada , который имеет некоторую поддержку UWP для Windows 64

Visual Studio Community Edition бесплатно.

Если вы действительно хотите использовать win32ada, то вам, возможно, придется связаться с AdaCore и посмотреть, поддерживают ли они его для своей платной версии, или придерживаться версии, поставляемой с GNAT GPL 2017 для Windows 32bit (которая по-прежнему доступна для загрузки). ). Вы можете соединить его с более обновленным компилятором Ada из msys2 , в котором поддерживаются как 64-битные, так и 32-битные версии GNAT.

...