我找到了Get DLL path at runtime,但不确定将localFunc用作变量。我尝试了DLL的文件名,尝试了null和其他操作,但返回的状态始终为“找不到文件”。
从MSDN:


  lpModuleName [输入,可选]
  加载的模块的名称(.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; }
谢谢。我敢肯定这是一个简单的问题。

最佳答案

用原始名称(例如user32.dll)或DLL的名称调用GetModuleHandle()。拥有句柄后,调用GetModuleFileName()以获取包括路径在内的全限定名称。

07-24 09:45
查看更多