所以我拍摄了一个过程的模块快照。我想扫描它的特定DLL。如果找到它,它将打破循环。如果找不到,则应该打印未找到的DLL。使用TlHelp32我有以下几行代码:
while (wcscmp(entryDllStrucs.szExePath, file_path) != 0)
{
LPCWSTR pre = entryDllStrucs.szModule;
Module32Next(dllpathSnapShot, &entryDllStrucs);
LPCWSTR post = entryDllStrucs.szModule;
if (pre == post) {cout << "Failed to find DLL\n"; break;}
}
file_path是wchar_t是文件的路径。这一切都有效,除了没有找到DLL的部分,它会中断。当调用Module32Next时,Thte LPCWSTR pre会改变。我也尝试将其设为const LPCWSTR pre = entryDllStructs.szModule
和const LPCWSTR post = entryDllStructs.szModule
但这不起作用。长期投射到DWORD也不起作用。
帮助将不胜感激!
C ++ / Win32API的
答案 0 :(得分:1)
您的pre
和post
变量是指针。它们都指向同一个MODULEENTRY32
结构的同一个成员。因此,比较它们毫无意义,它们总是包含相同的值。此外 - 您的整个方法都是错误的,因为您的代码将输出&#34;无法找到DLL \ n&#34; while循环的每次迭代都有一个字符串。此外,由于您从不检查Module32Next
结果,如果找不到目标dll,您的循环将永远不会结束。
BOOL fFound = FALSE;
while (TRUE)
{
if(!wcscmp(entryDllStrucs.szExePath, file_path))
{
fFound = TRUE;
break;
}
if(!Module32Next(dllpathSnapShot, &entryDllStrucs))
break;
}
if(!fFound)
{
cout << "Failed to find DLL\n"; break;
}