'const char*'和'WCHAR*'

'const char*' and 'WCHAR*'

本文关键字:WCHAR const char      更新时间:2023-10-16

这是我第一次制作外部游戏黑客应用程序,我正在玩一些东西。

我的问题:无法在参数传递中将"常量字符*"转换为"WCHAR*"。

我已经尝试将字符集更改为多字节,但它仍然显示错误。

#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
HANDLE hProc = NULL;
DWORD pID;
bool attachProc(char* procName)
{
PROCESSENTRY32 procEntry32;
procEntry32.dwSize = sizeof(PROCESSENTRY32);

auto hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcSnap == INVALID_HANDLE_VALUE) 
{
std::cout << "Snapshot failed :((" << std::endl;
return false;
}
while (Process32Next(hProcSnap, &procEntry32))
{
std::cout << procEntry32.szExeFile << std::endl;
if (!strcmp(procName, procEntry32.szExeFile)) //ERROR RIGHT THERE
{
std::cout << "Process found: " << procEntry32.szExeFile << " Process id: " << procEntry32.th32ProcessID << std::endl;
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procEntry32.th32ProcessID);
pID = procEntry32.th32ProcessID;
if (hProc == NULL)
{
std::cout << "Process handling failed." << std::endl;
}
CloseHandle(hProcSnap);
return true;
}
}
std::cout << "Couldn't find " << procName << " in the process snapshot." << std::endl;
CloseHandle(hProcSnap);
return false;
}
template <class dataType>
void wpm(dataType valToWrite, DWORD addressToWrite) {
WriteProcessMemory(hProc, (PVOID)addressToWrite, &valToWrite, sizeof(dataType), 0);
}
template <class dataType>
void rpm(DWORD addressToRead)
{
dataType rpmBuffer;
ReadProcessMemory(hProc, (PVOID)addressToRead, rpmBuffer, sizeof(dataType), 0);
return rpmBuffer;
}
int main()
{
DWORD memoryAddress;
attachProc((char*)"hl2.exe");
}

Tysm,我希望你们能帮我解决这个问题。

你应该得到一个错误。首先,const char*可以与const WCHAR*兼容,而不是WCHAR*

另一件事,通常,在Windows中,WCHAR字符代表utf-16个字符,ascii字符与utf-16字符不同。Windows具有从utf-8ascii转换为utf-16的内置功能,如下所示:

const auto result = MultiByteToWideChar(
CP_ACP,
MB_ERR_INVALID_CHARS,
yourStringHere,
yourStringSizeHere
yourTargetStringHere,
yourTargetStringSizeHere
);

而且,C 标准库具有等效的实现 -

std::mbstowcs(wchar_t* dst, const char* src, std::size_t len);