所以我拍摄了一个流程的模块快照。我想扫描它以查找特定的 DLL。如果找到,它将打破循环。如果没有找到,它应该打印 DLL not found。使用 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 时,LPCWSTR pre 将发生变化。我也试图让它成为 const LPCWSTR pre = entryDllStructs.szModule
和 const LPCWSTR post = entryDllStructs.szModule
但这没有用。转换为 DWORD long 也不起作用。
帮助将不胜感激!
C++/Win32Api
最佳答案
您的pre
和post
变量是指针。它们都指向同一 MODULEENTRY32
结构的同一成员。所以比较它们是没有意义的,它们总是包含相同的值。此外 - 您的整个方法都是错误的,因为您的代码将在 while 循环的每次迭代中输出“无法找到 DLL\n”字符串。此外,由于您从不检查 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;
}
关于c++ - 在 while 循环中使用 Module32Next() 时比较 wchar_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50341039/