Есть ли в Ada 95 функция, которая возвращает мне строку, содержащую зарегистрированное имя пользователя в приложении Windows? Спасибо.
Чтение имени пользователя для входа в Windows с помощью Ada 95
comment
Язык (например, C++) не имеет понятия в своем стандарте для пользователей или логинов. Таким образом, вы можете немного перефразировать этот вопрос, чтобы избежать множества педантичных ответов, которые не являются базовыми функциональными ответами Ады. Возможно, что-то вроде: «Как я могу получить имя вошедшего в систему пользователя Windows из моей программы на Аде?» Я использую компилятор XYZ.
- person T.E.D.   schedule 09.11.2011
Ответы (4)
Общий ответ заключается в использовании любого механизма, поддерживаемого вашей средой Ada, для вызова собственных функций Win32 API и для вызова GetUserName
.
person
Greg Hewgill
schedule
08.11.2011
Все, что говорится в стандарте Ada 95 об этом, находится в разделе B.3 Взаимодействие с C а>. Ваша среда Ada в Windows будет иметь документацию, описывающую, как использовать эти средства для вызова функций Win32 API.
- person Greg Hewgill; 09.11.2011
Конкретный пакет GNAT Ada.Command_Line.Environment
может быть доступной альтернативой.
person
trashgod
schedule
09.11.2011
Если бы вам было разрешено использовать Ada 2005, вы могли бы использовать пакет Ada.Environment_Variables, чтобы получить значение USERNAME
(я думаю, это правильная переменная окружения для Windows? Это USER
в Дарвине...)
person
Simon Wright
schedule
09.11.2011
Или вы можете использовать
pragma Import(C, getenv);
- person Keith Thompson; 09.11.2011
Проблема с использованием переменной среды заключается в том, что ее легко подделать. (Так же, как и
GetUserName
, но менее тривиально.)
- person Greg Hewgill; 10.11.2011
Используя идею из комментария @KeithThompson, а также предложение @SimonWright USERNAME, один из способов сделать это — использовать код:
function GetUsername return String is
function GetEnv (Variable : String) return Interfaces.C.Strings.chars_ptr;
pragma Import (C, GetEnv, "getenv");
Command : constant String := "USERNAME";
Answer_Ptr : constant Interfaces.C.Strings.chars_ptr := GetEnv (Command);
Answer : constant String := Interfaces.C.Strings.Value (Answer_Ptr);
begin
return Answer;
end GetUsername;
Не чистая Ада 95, но она хорошо подходит (и мне не нужно использовать переключатель gnat05).
person
Rego
schedule
09.11.2011