• C++使用Windows API- GetModuleFileName获取可执行文件路径方法。


    C++使用Windows API- GetModuleFileName获取可执行文件路径方法。

    1、 使用GetModuleFileName()获取执行程序完整路径和名称:

    // 返回值:获取到字符串大小
    DWORD GetModuleFileName(
       HMODULE hModule,     // 模块的句柄,如果是当前模块,NULL
       LPTSTR lpFilename,   // 文件路径和名称
       DWORD nSize          // 获取字符串的最大长度
    };
    2、去掉后面的文件名称,得到完整路径:

    从后向前查找字符'\',并将其后字符置为0,作为字符串结尾。

    代码:

    #include
    #include
    using namespace std;
     
    bool GetExePath(TCHAR* filepath, const int& max_length) {
        auto sz = GetModuleFileName(nullptr, filepath, max_length);
        if (sz == 0)
            return false;
        for (int n = sz - 1; n > 0; n--) {
            if (filepath[n] == TCHAR('\\')) {
                filepath[n + 1] = 0;
                break;
            }
        }
        return true;
    }
     
    int main()
    {
        TCHAR filepath[512];
        bool bret = GetExePath(filepath, 512);
        if(!bret)
            return -1;
        wprintf_s(L"%s\n", filepath);   // Unicode
        //printf_s("%s\n", filepath);   // Multi-byte
        return 0;
    }
    如果包含遇到错误:
            错误    C2760    语法错误: 意外标记 "标识符",应为 "类型说明符" 

    在“属性 -> C\C++ -> 语言”选项 下,将“符合模式”设为“否”。


    ————————————————
    版权声明:本文为CSDN博主「cww_sh26」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/cww_sh26/article/details/125248071

  • 相关阅读:
    如何使用ArcGIS Pro提取河网水系
    STM32 + RT-Thread + LVGL
    使用python脚本传递参数:(三种方式可收藏)
    在Ubuntu20.04安装Kylin4 On Docker并在DataGrip配置JDBC协议连接容器内Hive1.2.1及Kylin4.0.0
    java基于springboot酒店客房预定管理系统ssm
    关于Arction的问题(语言-c#)
    从零开始学习Linux(1)
    Blazor前后端框架Known-V1.2.4
    (附源码)计算机毕业设计Java坝上长尾鸡养殖管理系统
    Django之视图
  • 原文地址:https://blog.csdn.net/u012294613/article/details/127446327