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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

函數(shù)說明:

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

DWORD GetCurrentDirectory(
   DWORD nBufferLength, // size of directory buffer
   LPTSTR lpBuffer // directory buffer?
   );?
函數(shù)功能
 找到當(dāng)前進(jìn)程的當(dāng)前目錄?
參數(shù)說明
  nBufferLength:lpBuffer緩沖區(qū)的長(zhǎng)度?
  lpBuffer:指定一個(gè)預(yù)定義字串,用于裝載當(dāng)前目錄?
返回值?
 調(diào)用成功 返回裝載到lpBuffer的字節(jié)數(shù)。

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

GetModuleFileName函數(shù)
?

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

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

調(diào)用示例:
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);

補(bǔ)充說明:
如果想得到一個(gè)已經(jīng)加載的DLL文件的路徑,可以運(yùn)用以下方法:
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文件所在的目錄

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。