Windows API一日一练(83)GetModuleFileName函数

Post date: 2012/3/27 上午 07:49:49

分类: Direct3D2007-12-05 20:23 5081人阅读 评论(6) 收藏 举报

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