在while循环中使用Module32Next()时比较wchar_t

时间:2018-05-15 01:20:22

标签: c++ string winapi compare

所以我拍摄了一个过程的模块快照。我想扫描它的特定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.szModuleconst LPCWSTR post = entryDllStructs.szModule但这不起作用。长期投射到DWORD也不起作用。

帮助将不胜感激!

C ++ / Win32API的

1 个答案:

答案 0 :(得分:1)

您的prepost变量是指针。它们都指向同一个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;
}