2011-11-08 19 views
0

Ada 95中有一個函數返回一個字符串,其中包含Windows應用程序中登錄的用戶名? 謝謝。閱讀Windows登錄用戶名與Ada 95

+0

語言(如C++)在其「用戶」或「登錄」標準中沒有概念。因此,您可能需要稍微改寫一下這個問題,以避免很多迂腐的「這不是基於Ada功能」的答案。也許是這樣的:「我如何從我的Ada程序中獲取已登錄的Windows用戶的名稱?我正在使用* XYZ *編譯器。」 –

回答

2

使用從@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; 

不是純粹的Ada 95,但它非常適合(我沒有使用gnat05開關) 。

3

一般的答案是使用Ada環境支持的任何機制來調用本機Win32 API函數,並調用GetUserName函數。

+0

你偷了我的答案! ;) – Shark8

+0

那麼在Ada 95中這意味着什麼? – Rego

+0

所有關於這個的Ada 95標準都是[B.3與C接口]部分(http://www.adahome.com/rm95/rm9x-B-03.html)。 Windows上的Ada環境將具有描述如何使用這些工具來調用Win32 API函數的文檔。 –

2

如果你被允許使用2005年的Ada,你可以使用包Ada.Environment_Variables得到的USERNAME值(我認爲這是爲Windows正確的環境變量?這是USER達爾文...)

+1

或者您可以使用'pragma Import(C,getenv);' –

+0

依賴環境變量的問題在於僞造很重要。 (所以'GetUserName',但不那麼平凡。) –