VB6.0からVC++.NETへ変えようと思っているのですが、
VBのApp.Pathのように
実行しているコードと同じフォルダの文字列(「パス」っていうんですか?)
を取得するにはどうすればよいのでしょうか?
GetModuleFileName を使います。
.NET なら、Assembly::GetExecutingAssembly()->get_Location() です。たぶん。
__argv[0] でも参照できます。
ちなみに __argv[1] 以降にはコマンドライン引数が格納されます。
> __argv[0] でも参照できます。
パスが入っているかは環境依存だったような。
Win9X系とWinNT系で結果が違ったような…
ってか、私の回答&その後…でした。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200305/03050009.txt
>パスが入っているかは環境依存だったような。
>Win9X系とWinNT系で結果が違ったような…
瀬戸っぷ様 フォローありがとうございます。
環境依存がありましたか。知らずにいつも__argv[0]を使っていました。
ちなみに、手元にあるWinXPおよびWin2000ではフルパスが取得できています。
WinNTの場合の問題でしょうか?
ともかく、GetModuleFileNameの方が確実そうですね。
> ちなみに、手元にあるWinXPおよびWin2000ではフルパスが取得できています。
手元のWin2000SP4で下記のソースを実行。
「コマンド プロンプト」ではexe名だけ、
VC6.0からの実行ではフルパスで表示されました。
(ちなみに、コマンドプロンプトで相対パス指定で実行したら指定したとおりのパスが表示されました。)
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%s\n", argv[0]);
return 0;
}
> ともかく、GetModuleFileNameの方が確実そうですね。
ですね。
ツイート | ![]() |