我找到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;
}
谢谢。我确定这是一个简单的问题。
答案 0 :(得分:3)
使用user32.dll等原始名称或DLL的名称调用GetModuleHandle()。获得句柄后,调用GetModuleFileName()以获取包含路径的完全限定名称。