5

重複の可能性:
現在の実行可能ファイル名の抽出

iniファイルから構成を読み取るプログラムを作成しました。そのファイルの名前は実行可能ファイルの名前と同じである必要がありますが、もちろん拡張子も付いています。したがって、名前を付けた場合myprogram.exe、構成は である必要がありmyprogram.ini、コンパイル後にexeの名前を変更すると、新しい名前に一致するように見えるはずです。

プログラム名を取得できることは知っていますがargv[0]、これはコマンドラインから開始した場合にのみ機能し、エクスプローラーでクリックすると、この配列は空になります。

ここで回答を読むと、この関数で何かをしなければならないと思います: https://stackoverflow.com/a/10572632/393087 - しかし、その関数の使用法の良い例が見つかりません。 C ++の非常に初心者であり、一般的な関数定義(マイクロソフトのページに示されているようなもの)は理解するのが難しすぎますが、実際の例を取得すると、理解するのは簡単です.

4

2 に答える 2

11
#include <windows.h>
#include <Shlwapi.h>
// remember to link against shlwapi.lib
// in VC++ this can be done with
#pragma comment(lib, "Shlwapi.lib")

// ...

TCHAR buffer[MAX_PATH]={0};
TCHAR * out;
DWORD bufSize=sizeof(buffer)/sizeof(*buffer);
// Get the fully-qualified path of the executable
if(GetModuleFileName(NULL, buffer, bufSize)==bufSize)
{
    // the buffer is too small, handle the error somehow
}
// now buffer = "c:\whatever\yourexecutable.exe"

// Go to the beginning of the file name
out = PathFindFileName(buffer);
// now out = "yourexecutable.exe"

// Set the dot before the extension to 0 (terminate the string there)
*(PathFindExtension(out)) = 0;
// now out = "yourexecutable"

これで、実行可能ファイルの「ベース名」へのポインタができました。内側を指しているbufferためbuffer、スコープ外になるoutと無効になることに注意してください。

于 2012-05-30T11:09:33.783 に答える
4

GetModuleFileName(NULL, .....)

しかし、私はその関数の使用法の良い例を見つけることができません

あなたは十分に努力していません。msdnの「GetModuleFileName」記事 の「例」セクション

于 2012-05-30T11:04:21.110 に答える