如何解决无法将 char[9] 转换为 char*
我是游戏黑客的新手,从学习了一个教程开始,该教程为我提供了源代码。一旦我理解了它的作用,我就尝试编译,但出现了 3 个相同的错误:
无法将 char[9] 转换为 char*(错误编号 C2664)
错误是指变量 ProcessName
和 ModuleName
。
即使我知道 C++ 的良好基础,我也总是在使用指针方面遇到困难。
对错误感兴趣的函数是这两个:
bool AttachProcess(char *ProcessName) {
HANDLE hPID = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
PROCESSENTRY32 procEntry;
procEntry.dwSize = sizeof(procEntry);
const WCHAR* procNameChar;
int nChars = MultiByteToWideChar(CP_ACP,ProcessName,-1,NULL,0);
procNameChar = new WCHAR[nChars];
MultiByteToWideChar(CP_ACP,(LPWSTR)procNameChar,nChars);
do
if (!wcscmp(procEntry.szExeFile,procNameChar))
{
this->dwPID = procEntry.th32ProcessID;
CloseHandle(hPID);
this->hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,this->dwPID);
return true;
}
while (Process32Next(hPID,&procEntry));
CloseHandle(hPID);
return false;
}
MODULEENTRY32 GetModule(char* ModuleName)
{
HANDLE hModule = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,dwPID);
MODULEENTRY32 mEntry;
mEntry.dwSize = sizeof(mEntry);
const WCHAR* modNameChar;
int nChars = MultiByteToWideChar(CP_ACP,ModuleName,0);
modNameChar = new WCHAR[nChars];
MultiByteToWideChar(CP_ACP,(LPWSTR)modNameChar,nChars);
do
if (!wcscmp(mEntry.szModule,modNameChar))
{
CloseHandle(hModule);
return mEntry;
}
while (Module32Next(hModule,&mEntry));
CloseHandle(hModule);
mEntry.modBaseAddr = 0x0;
return mEntry;
}
我记得这里的功能:
MemoryManager()
{
this->hProcess = NULL;
this->dwPID = NULL;
try {
if (!AttachProcess("csgo.exe")) throw 1;
this->ClientDLL = GetModule("client.dll");
this->EngineDLL = GetModule("engine.dll");
//and so on
解决方法
发生错误是因为您试图将字符串文字(const char[]
)传递给需要指向非常量字符数组(char *
)的指针的函数。
因为您从不修改 ProcessName
的内容,所以您应该更改
bool AttachProcess(char *ProcessName)
到
// VVVVV
bool AttachProcess(const char *ProcessName)
,
我投射了“csgo.exe”、“engine.dll”和“client.dll”:
if (!AttachProcess(const_cast<char*>("csgo.exe"))) throw 1;
this->ClientDLL = GetModule(const_cast<char*>("client.dll"));
this->EngineDLL = GetModule(const_cast<char*>("engine.dll"));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。