日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在 開發過程中經常需要獲得程序當前的運行目錄,這時就可以使用GetCurrentDirectory()和GetModuleFileName()函 數,GetCurrentDirectory只是返回當前進程的當前目錄,而并不是進程的鏡像文件(.exe)所在的目 錄,GetCurrentDirectory()適用于XP等系統,,在WinCE上不能使用,GetModuleFileName()適用于 WinCE2.0以后.

函數說明:

DWORD WINAPI GetModuleFileName(
HMODULE hModule,
LPTSTR lpFileName,
DWORD nSize
);
函數功能
? 此函數得到當前應用程序的運行目錄,還包括應用程序的文件名。?
參數說明
? hModule:要獲取文件名的模塊名柄,可以是運用LoadLiberary得到的句柄,null表示當前模塊?
? lpFileName:輸出參數,存放取得的文件名?
? nSize:lpFileName參數的長度

DWORD GetCurrentDirectory(
   DWORD nBufferLength, // size of directory buffer
   LPTSTR lpBuffer // directory buffer?
   );?
函數功能
 找到當前進程的當前目錄?
參數說明
  nBufferLength:lpBuffer緩沖區的長度?
  lpBuffer:指定一個預定義字串,用于裝載當前目錄?
返回值?
 調用成功 返回裝載到lpBuffer的字節數。

使用方法:
//下面的一段代碼主要是獲得當前程序的運行目錄(.exe)所在的目錄
{
??? CString path;?
??? GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH);?
??? path.ReleaseBuffer();?
??? int pos = path.ReverseFind('\\');?
??? path = path.Left(pos);?
}

GetModuleFileName函數
?

WINAPI DWORD GetModuleFileName(?
HMODULE?hModule,
LPWSTR?lpFilename,?
DWORD?nSize
);

????GetBuffer和ReleaseBuffer是一套需要配合使用的函數, 與GetBufferSetLength相比, 優點是如果分配的空間大于實際保存的字符串(0結尾),ReleaseBuffer會把多余申請的空間釋放, 歸還給系統; 但使用時需要注意以下問題: 如果要保存的字符串為abc(0結尾),則GetBuffer參數應至少為3; 如果要保存的內容不是以0結尾, 比如是讀取文件數據, 則GetBuffer參數如果大于文件長度時,ReleaseBuffer參數一定要為文件長度(如果GetBuffer參數為文件長度的話不存在問題,ReleaseBuffer參數可以為默認-1)! GetBufferSetLength相對比較容易理解, 它申請一個指定長度的空間, 即使里面最終保存的字符串長度小于申請的空間長度, 也不會將多余空間釋放.

調用示例:
TCHAR *path = new TCHAR[MAX_PATH];
ZeroMemory(path, MAX_PATH);
// path == "d:\Project\Test\MFC\MFC\debug"
GetCurrentDirectory(MAX_PATH, path);
// path ==? "d:\Project\Test\MFC\debug\MFC.exe"
GetModuleFileName(NULL,path,MAX_PATH);

補充說明:
如果想得到一個已經加載的DLL文件的路徑,可以運用以下方法:
char? strPath[MAX_PATH];???
GetModuleFileNameA(GetModuleHandle("你的DLL名字"),strPath,MAX_PATH);
int j=strlen(strPath);
for(j=strlen(strPath);strPath[j]!='\\';j--);
strPath[j]='\0';??
其中strPath即為你的DLL文件所在的目錄

總結

以上是生活随笔為你收集整理的MFC获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。