C++ 提取当前可执行文件名

C++ 提取当前可执行文件名,c++,windows,C++,Windows,首先,我想说我不是指完整的路径,什么 GetModuleFileName或argv[0]生成。有没有比在最后一次反斜杠之前把所有事情都忽略掉更聪明的解决方案 如果你使用.NET,那么这就是答案。但在内部,它可能会调用GetModuleFileName首先,您希望通过调用passingNULL作为模块句柄来获得可执行文件的完整路径。然后调用以拉出文件名组件 实际上,GetModuleFileName和argv[0]之间存在差异。后者是用于启动流程的名称。它可能缺少完整路径,但更重要的是,这里可能缺

首先,我想说我不是指完整的路径,什么

GetModuleFileName或argv[0]生成。有没有比在最后一次反斜杠之前把所有事情都忽略掉更聪明的解决方案

如果你使用.NET,那么这就是答案。但在内部,它可能会调用
GetModuleFileName

首先,您希望通过调用passing
NULL
作为模块句柄来获得可执行文件的完整路径。然后调用以拉出文件名组件


实际上,
GetModuleFileName
argv[0]
之间存在差异。后者是用于启动流程的名称。它可能缺少完整路径,但更重要的是,这里可能缺少
.exe
扩展名。如果您想知道实际的文件名,那么您需要在Windows C/C++中使用
GetModuleFileName

有一个全局变量
extern char*\u pgmptr
,可以从
\u get\u pgmptr(char**buffer)
读取该变量以及一个不安全的字符串副本

注意事项

仅当程序具有窄入口点(如main()或WinMain())时调用。_pgmptr全局变量包含与进程关联的可执行文件的完整路径。有关详细信息,请参阅

如果在两个进程中加载DLL,则一个进程中的文件名可能与另一个进程中的文件名大小写不同

全局变量_pgmptr自动初始化为可执行文件的完整路径,并可用于检索可执行文件的完整路径名


你在哪个站台?我想是Windows?在最后一个路径分隔符之后使用所有内容有什么不对?我自己,我只是在argv[0]上使用我自己编写的basename函数。还有一些路径函数可以做到这一点。Luka,你应该是正确的,标记不是意外添加的;)我不使用.NET。这是Windows api项目。这就是我想要找到的。不过,我觉得这个例子使用
voidmain
真的很有趣。说真的,微软?微软是被允许这样做的,因为他们编写了编译器。因此,他们可以使用特定于编译器的扩展,这是你和我(作为遵循公民的良好标准)无法做到的。