程序如何获得自己的可执行文件名?

可能重复:
提取当前的可执行文件名称

我创build了一个从ini文件读取configuration的程序,该文件的名称应该与可执行文件的名称相同,当然也可以使用其扩展名。 所以如果我把它命名为myprogram.exe ,configuration应该是myprogram.ini ,如果我在编译后更改exe的名字,它应该看起来适合于它的新名称。

我知道从argv[0]获取程序名是可能的,但是只有当它从命令行启动时才有效,当它在explorer中点击时,这个数组是空的。

当我通过这里的答案阅读,我认为它必须做这个function: https : //stackoverflow.com/a/10572632/393087 – 但我找不到任何使用该function的好例子,我非常初学c ++和一般的函数定义(就像在微软的页面上展示的那样)对我来说太难理解了,但是当我得到一个工作的例子时,对于我来说,理解起来是很简单的。

Solutions Collecting From Web of "程序如何获得自己的可执行文件名?"

 #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(GetmoduleeFileName(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不再有效。

GetmoduleeFileName(NULL, .....)

但是我找不到使用这个函数的好例子

你还没有努力。 msdn上的“GetmoduleeFileName”文章中的“示例”部分