我在代码中遇到这些错误,并且我试图阅读错误的文档,但我很难理解它。
错误:
这是我的代码:
#include <iostream>
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
#include <tlhelp32.h>
#include "Source.h"
using namespace std;
DWORD procID;
DWORD GetModuleBaseAddress(LPSTR ModuleName)
{
MODULEENTRY32 module32;
module32.dwSize = sizeof(MODULEENTRY32); //Module32First will fail if you don't do this
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, procID);
Module32First(hSnap, &module32);
if (hSnap == INVALID_HANDLE_VALUE) //just a check
return 0;
do //iterate through modules
{
if (!strcmp(module32.szModule, ModuleName)) //if there is a match
break;
} while (Module32Next(hSnap, &module32));
CloseHandle(hSnap);
return (DWORD)module32.modBaseAddr;
}
就像我说的那样,我不知道为什么会这样做而且真的很想知道。如果对你们来说不是太多,那么有人能为我提供解决方案吗?感谢。
注意:我是这个论坛的新手,所以如果它易于理解等,请给我反馈我的问题。
答案 0 :(得分:1)
您正在使用Unicode支持编译代码。在此模式下,字符是16位实体,称为WCHARS
。
由于strcmp
接受指向char
的指针,编译器会正确地抱怨指针不兼容。
除了wcscmp
之外,还有一个名为strcmp
的函数,类似于WCHAR
。此外,还有一个名为_tcscmp
的函数,无论您的编译模式是什么,它都可以正常工作。
您可以在MSDN上了解更多相关信息。