C++ dll如何獲取所在路徑


當dll被其他語言調用的時候,如何在dll中獲取所在路徑呢?這個需求看似很平常,但一番嘗試還是幾經波折。

一、使用絕對路徑,這在自己的電腦是可行的,如果路徑設置合理,在大多數電腦上應該也是運行正常的,但這不是我們想要的,我就想獲得dll當前所處路徑。

二、使用相對路徑,這看起來是不錯的方案,但編譯運行死活不正常,相對路徑不對,查資料解釋說相對路徑的當前目錄不一定等於應用程序執行文件的所在目錄,應用程序啟動,當前目錄可以被任意設置。

三、外部語言傳路徑給dll,這應是可以的,但這里也有個問題,我要路徑的地方是個靜態庫,它被主的dll使用,白話解釋就是我要向我同事的閨蜜告白,就算同事願意牽線還是挺費勁的。

四、嘗試在dll調用內部獲得路徑,使用GetModuleFileName這個API,它需要3個參數,第一個參數是HMODULE類型模塊句柄,使用NULL獲得啟動應用程序全路徑,第2個參數是一個指向字符串緩沖區的指針,第3個參數是這個緩沖區的最大字符數量。

第四種方案補充,進一步使用VirtualQuery,如果找到,則使用MEMORY_BASIC_INFORMATION內存結構體的模塊句柄信息;沒找到則用NULL。

重要代碼

HMODULE GetSelfModuleHandle()
{
	//Windows內存與結構管理結構體
	MEMORY_BASIC_INFORMATION mbi;
	//查詢內存的狀態
	return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM