2011-11-08 17 views
0

Windowsアプリケーションでログオンしたユーザー名を含む文字列を返す関数がAda 95にありますか?おかげさまで Ada 95でWindowsログインユーザー名を読む

+0

言語(C++など)には、「ユーザー」または「ログイン」の標準では概念がありません。このように、この質問を少し言いたいことがあるかもしれませんが、多くのペダンティックな "それは基本的なAdaの機能性"の答えを避けるためです。おそらく、「私のAdaプログラムからログインしているWindowsユーザーの名前を取得するにはどうすればいいですか?私は* XYZ *コンパイラを使用しています。 –

答えて

2

エイダ95

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; 

ない純粋な、それがうまくフィット(と私はgnat05スイッチを使用する必要はありません):@KeithThompsonコメントからのアイデア、プラス@SimonWright USERNAMEの提案、それを行うための一つの方法は、コードを使用しています。

3

一般的な答えは、ネイティブWin32 API関数を呼び出してGetUserName関数を呼び出すために、Ada環境がサポートするすべてのメカニズムを使用することです。

+0

あなたは私の答えを盗んだ! ;) – Shark8

+0

これはAda 95の意味ですか? – Rego

+0

Ada 95のすべての規格では、[B.3 Interfacing with C](http://www.adahome.com/rm95/rm9x-B-03.html)というセクションがあります。 Windows上のAda環境には、これらの機能を使用してWin32 API関数を呼び出す方法を説明したドキュメントがあります。 –

2

あなたはエイダ2005を使用させた場合、あなたはUSERNAMEの値を取得するには、パッケージAda.Environment_Variablesを使用することができますが(私はWindowsのための右のenv VARだと思う?それはダーウィンのUSERだ...)

+1

また、 'pragma Import(C、getenv);'を使うこともできます。 –

+0

環境変数に頼ることの問題は、偽造するのが簡単だということです。 (これは 'GetUserName'ですが、自明ではありません。) –

関連する問題