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

标签 c++ string winapi compare

所以我拍摄了一个流程的模块快照。我想扫描它以查找特定的 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.szModuleconst LPCWSTR post = entryDllStructs.szModule 但这没有用。转换为 DWORD long 也不起作用。

帮助将不胜感激!

C++/Win32Api

最佳答案

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

相关文章:

.net - 如何在 C++ 上从 CLR 捕获事件

r - 具有固定(文字)字符的矢量化 stringr

winapi - 使用 DT_CALCRECT 和 DT_RIGHT 绘制文本不起作用

c - 如何在 WM_KEYDOWN 中吃 key

visual-studio - MSBuild "The windows SDK version 10.0.19041.0 was not found",即使已安装

c++ - 线程问题(追自己的尾部)

c++ - 以十六进制打印出 DWORD 在 win32 c++ 中返回 0x7FFFFFFF

c++ - 静态构建 Qt 5.1

string - 生成设定长度的字符串

java - 在 Java 中检查空字符串