• GetModuleFileName


    GetModuleFileName

    HMODULE hModule = ::GetModuleHandle(NULL);
    if (hModule != NULL)
    {
        ::GetModuleFileName(hModule, strRet.GetBuffer(MAX_PATH), MAX_PATH);
        strRet.ReleaseBuffer();
    }

    GetModuleFileName函数

    在 开发软件的过程里,经常需要把数据保存到当前执行文件路径下面,或者读取当前执行文件路径下的一些配置信息。这时就需要从当前模块里获取所在的目录路径, 以便进行固定的位置操作文件。要解决这个需求,就需要调用API函数GetModuleFileName来获取模块所在的路径。

    函数GetModuleFileName声明如下:
    WINBASEAPI
    DWORD
    WINAPI
    GetModuleFileNameA(
        __in_opt HMODULE hModule,
        __out_ecount_part(nSize, return + 1) LPCH lpFilename,
        __in    DWORD nSize
        );
    WINBASEAPI
    DWORD
    WINAPI
    GetModuleFileNameW(
        __in_opt HMODULE hModule,
        __out_ecount_part(nSize, return + 1) LPWCH lpFilename,
        __in    DWORD nSize
        );
    #ifdef UNICODE
    #define GetModuleFileName GetModuleFileNameW
    #else
    #define GetModuleFileName GetModuleFileNameA
    #endif // !UNICODE
    hModule是模块的句柄,或者设置为NULL表示当前模块。
    lpFilename是保存路径的缓冲区。
    nSize是缓冲区的大小。

    调用函数的例子如下:
    #001 //获取当前程序所在路径。
    #002  //蔡军生 2007/12/05 QQ:9073204 深圳
    #003  void TestGetExePath(void)
    #004  {
    #005        //
    #006        const int nBufSize = 512;
    #007        TCHAR chBuf[nBufSize];
    #008        ZeroMemory(chBuf,nBufSize);
    #009
    #010        //获取当前执行文件的路径。
    #011        if (GetModuleFileName(NULL,chBuf,nBufSize))
    #012        {
    #013              //输出带文件名称路径。
    #014              OutputDebugString(chBuf);
    #015              OutputDebugString(_T("\r\n"));
    #016
    #017              //获取文件路径。
    #018              TCHAR* lpStrPath = chBuf;
    #019              PathRemoveFileSpec(lpStrPath);
    #020              OutputDebugString(lpStrPath);
    #021              OutputDebugString(_T("\r\n"));
    #022        }
    #023
    #024  }

    输出的结果如下:
    g:\work\windows_api\wincpp2\debug\WinCpp.exe
    g:\work\windows_api\wincpp2\debug
  • 相关阅读:
    282. Expression Add Operators
    281. Zigzag Iterator
    280. Wiggle Sort
    How Not to Crash #2: Mutation Exceptions 可变异常
    Moving Swiftly
    How to Use updateConstraints
    Don’t Put View Code Into Your View Controller别把View创建的代码放在VC中
    Where-To-Put-The-Auto-Layout-Code
    iOS five years[转]
    ResponderChain note
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/1994776.html
Copyright © 2020-2023  润新知