获取DLL所在的路径

时间:2015-03-27 15:21:35

标签: c++ dll

我找到Get DLL path at runtime,但我不确定如何使用localFunc变量。我尝试了DLL的文件名,我尝试了null和其他一些东西,但返回的状态始终是' File Not Found'。 来自MSDN:

  

lpModuleName [in,optional]   已加载模块的名称(.dll或.exe文件)或模块中的地址(如果dwFlags为GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS)。

所以我认为它们只是指普通的文件名,例如" MyControl.dll"而不是文件的路径,因为我不知道路径。 编辑:添加了实际代码:

char localFunc[MAX_PATH]
sprintf_s(localFunc, 52, "MyActiveXComponent.dll");
if (!GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR) &localFunc, &hm))
{
    int ret = GetLastError();
    OutFile << L"GetModuleHandle returned " <<  ret << std::endl;
} else {
    GetModuleFileNameA(hm, path, sizeof(path));
    OutFile << L"Path of dll is:" << path << L"<" << std::endl;
}

这是我最终的结果(两种方式)

LPCWSTR anotherFunc = L"MyActiveXComponents.dll"; HMODULE hm2 = GetModuleHandle(anotherFunc); // get the handle to the module LPWSTR anotherPath = new WCHAR[MAX_PATH]; GetModuleFileName(hm2, anotherPath, MAX_PATH); // get the full path OutFile << L"Path of dll is:" << anotherPath << L"<" << std::endl; 这是另一种方式。

char path[MAX_PATH]; HMODULE hm = NULL; char localFunc[MAX_PATH] = {"MyActiveXComponents.dll"}; if (!GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, LPCSTR) &localFunc, &hm)) { int ret = GetLastError(); OutFile << L"GetModuleHandle returned " << ret << std::endl; } else { GetModuleFileNameA(hm, path, sizeof(path)); OutFile << L"Path of dll is:" << path << L"<" << std::endl; } 谢谢。我确定这是一个简单的问题。

1 个答案:

答案 0 :(得分:3)

使用user32.dll等原始名称或DLL的名称调用GetModuleHandle()。获得句柄后,调用GetModuleFileName()以获取包含路径的完全限定名称。