簡體   English   中英

如何在C ++中的同一個dll中獲取dll的位置路徑?

[英]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 ,請使用TCHARGetModuleFileNameW (由於應用程序處於unicode模式,所以請使用GetModuleFileName ),但不要嘗試在不強制轉換為Ansi情況下輸出到控制台窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM