[英]How can I get dll location path inside the same dll in C++?
假設我有一個名為MyDll.dll的dll。
它在d:\\ MyWorks \\ MyDll.dll中 [它是directshow dll]
我想從MyDll代碼內部獲取其位置的路徑。
我為此使用了增強功能: FileSystem
string path = "";
boost::filesystem::path full_path( boost::filesystem::current_path() );
path = full_path.string();
但這給了我它的執行路徑,它是C:\\ Windows \\ system32 ,而不是它的位置路徑,它是d:\\ MyWorks \\ MyDll.dll 。
如何獲取同一個dll中的dll位置?
更新:通過獲取模塊:
TCHAR path[2048];
GetModuleFileName( NULL, path, 2048 );
ostringstream file;
file << path ;
string const pathString =file.str();
cout << "Path: " << pathString << endl;
給我只是十六進制字符串:0049EA95 ....
在您的DllMain
您將收到一個HINSTANCE
參數。 這實際上是您的dll的HMODULE
,您可以將其與GetModuleFileName
一起使用以檢索dll的標准路徑。 要僅獲取包含該目錄的目錄,只需刪除文件名(可以使用boost::filesystem
,具有shell路徑功能以及strrchr
)。
您可以使用GetModuleFileName來獲取模塊的完整路徑。
第一個參數是所需模塊的句柄。 如果此參數為NULL,則GetModuleFileName檢索當前進程的可執行文件的路徑。
如果需要其他模塊的路徑,則可以使用GetModuleHandle來獲取句柄。 例如:
TCHAR path[_MAX_PATH+1];
GetModuleFileName(GetModuleHandle(_T("MyDll.dll")), path, sizeof(path)/sizeof(path[0]));
TCHAR s[MAX_PATH+1];
GetModuleFileName(hInstance, s, _countof(s));
其中hInstance
是DllMain的參數。 盡管名稱,它返回完整路徑。
您的問題是試圖在Ansi
控制台輸出窗口上看到Unicode
字符串。 如果您真的想查看結果,則需要將字符串轉換為Ansi
(當然會有一些損失),或者可以直接使用;
char path[2048];
GetModuleFileNameA(NULL, path, 2048);
cout << path;
如果要使用Unicode
,請使用TCHAR
和GetModuleFileNameW
(由於應用程序處於unicode模式,所以請使用GetModuleFileName
),但不要嘗試在不強制轉換為Ansi
情況下輸出到控制台窗口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.