strcmp 错误'WCHAR [260]' 'const char *'



我在发布模式下编译此代码时遇到问题(它在调试模式下运行良好(

#include "MemoryManagement.h"
#include "Windows.h"
#include "Colors.h"
#include <iostream>
#include <TlHelp32.h>
using namespace std;
MemoryManagement::MemoryManagement()
{
handle = NULL;
}
MemoryManagement::~MemoryManagement()
{
CloseHandle(handle);
}
DWORD MemoryManagement::getProcess(const char* proc)
{
HANDLE hProcessId = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
DWORD process = 0;
PROCESSENTRY32 pEntry;
pEntry.dwSize = sizeof(pEntry);
SetConsoleColor(colors::blue_bright);
cout << "Searching game..." << endl;
while (!process)
{
do {
if (!strcmp(pEntry.szExeFile, proc))
{
process = pEntry.th32ProcessID;
CloseHandle(hProcessId);
handle = OpenProcess(PROCESS_ALL_ACCESS, false, process);
}
} while (Process32Next(hProcessId, &pEntry));
}
SetConsoleColor(colors::green_bright);
cout << "Game found!" << endl << endl;
return process;
}
uintptr_t MemoryManagement::getModule(DWORD procId, const char* modName)
{
HANDLE hModule = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId);
MODULEENTRY32 mEntry;
mEntry.dwSize = sizeof(mEntry);
do
{
if (!strcmp(mEntry.szModule, modName))
{
CloseHandle(hModule);
return (DWORD)mEntry.hModule;
}
} while (Module32Next(hModule, &mEntry));
return 0;
}
DWORD MemoryManagement::getAddress(DWORD addr, std::vector<DWORD> vect)
{
for (unsigned int i = 0; i < vect.size(); i++)
{
ReadProcessMemory(handle, (BYTE*)addr, &addr, sizeof(addr), 0);
addr += vect[i];
}
return addr;
}

错误输出是这样的:

1>c:userskuhisourcereposcscsmemorymanagement.cpp(31): error C2664: 'int strcmp(const char *,const char *)': cannot convert argument 1 from 'WCHAR [260]' to 'const char *'
1>c:userskuhisourcereposcscsmemorymanagement.cpp(31): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:userskuhisourcereposcscsmemorymanagement.cpp(54): error C2664: 'int strcmp(const char *,const char *)': cannot convert argument 1 from 'WCHAR [256]' to 'const char *'
1>c:userskuhisourcereposcscsmemorymanagement.cpp(54): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>Done building project "CS.vcxproj" -- FAILED.

我看到问题出在 strcmp 上,我给出了错误的数据类型......

我四处搜索,没有找到符合我情况的修复程序......

为什么它在调试模式下工作,但在发布模式下不工作?

我必须比较每次打开程序时都会更改的 2 个字符串,所以我不明白如何将参数作为 const

这在调试模式下工作是没有意义的;这一定是一个错误的观察。

WCHARwchar_t(如果需要,unsigned short(的Microsoft别名(ref(。

你有一系列这些东西。

所述数组永远不会与const char*兼容,因为wchar_tchar是两个不同的东西。因此,您不能将数组传递给需要const char*的函数,例如strcmp

C(以及扩展的 C++(还提供了您可以使用的宽字符版本的strcmpwcscmp

最新更新