C/C++ GetModuleFileName 获取指定 exe 和 dll 路径

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一.GetModuleFileName 函数

GetModuleFileName 函数返回当前进程已加载 可执行文件或 DLL 文件的完整路径名(以’\0’终止),该模块必须由当前进程地址空间加载。

DWORD WINAPI GetModuleFileName(
  _In_opt_  HMODULE hModule,   //应用程序或DLL实例句柄,NULL则为获取当前程序可执行文件路径名
  _Out_     LPTSTR lpFilename, //接收路径的字符串缓冲区,内存指针
  _In_      DWORD nSize        //接收路径的字符缓冲区的大小
);

二.获取指定 exe 和 dll 路径

char exeFullPath[MAX_PATH]={0};

//如果第一个参数为空,默认获取指定exe路径
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
//输出:C:\Users\xxx\Desktop\coder\\my.exe



char dllFullPath[MAX_PATH]={0};
//获取指定文件路径路径
GetModuleFileName(“my.dll”,dllFullPath,MAX_PATH);

//输出:C:\Users\xxx\Desktop\coder\\my.dll

三.获取指定 exe 和 dll 目录

可以通过 strrchr 函数去掉 GetModuleFileName 获取到的 exe 或者 dll 路径后缀,得到目录路径,示例如下:


//方案一:
*strrchr( exeFullPath, '\\') = 0;
//输出:C:\Users\xxx\Desktop\coder\\


//方案二:
strrchr( exeFullPath, '\\')[0]= 0;
//输出:C:\Users\xxx\Desktop\coder\\


//方案三:
*(strrchr( exeFullPath, '\\')+1) = 0;
//输出:C:\Users\xxx\Desktop\coder\\


//方案四:
strrchr( exeFullPath, '\\')[1]= 0;
//输出:C:\Users\xxx\Desktop\coder\\

四.完整代码

char exeFullPath[MAX_PATH]={0};

//获取exe路径
GetModuleFileName(NULL,exeFullPath,MAX_PATH);

//接下来把xxx.exe文件名去掉,有以下四种:
*strrchr( exeFullPath, '\\') = 0;
strrchr( exeFullPath, '\\')[0]= 0;
*(strrchr( exeFullPath, '\\')+1) = 0;
strrchr( exeFullPath, '\\')[1]= 0;

五.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 va_start / va_end / va_arg 自定义 printf 函数
  16. C语言 main 函数参数 main(int argc, char *argv[])
  17. C语言 结构体struct简介(一)
  18. C语言 结构体struct定义和使用(二)
  19. C语言 结构体struct数组(三)
  20. C语言 结构体struct指针(四)
  21. C语言 结构体struct成员函数(五)
  22. C语言 结构体struct嵌套(六)
  23. C语言 结构体struct值传递和址传递(七)
  24. C/C++ error: cannot assign to non-static data member within const member function ‘xxxx’
  25. C++ 关于类中 const 的使用
  26. C/C++ =delete
  27. C/C++ 条件编译 #ifdef
  28. C/C++ error C2065: “M_PI”: 未声明的标识符
  29. C/C++ error C2027: 使用了未定义类型“std::tuple”
  30. C/C++ vs 没有匹配 if 的非法 else 问题解决办法
  31. C/C++ Visual studio 中文注释导致编译不能通过
  32. C/C++ error C2589: “(”: “::”右边的非法标记
  33. C/C++ error:表达式是必须修改的左值
  34. C/C++ GetModuleFileName 获取指定 exe 和 dll 路径

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容