繁体   English   中英

无法将 char[9] 转换为 char*

[英]Can't convert char[9] to char*

我是游戏黑客的新手,并从一个给我源代码的教程开始。 一旦我理解了它的作用,我就尝试编译,结果出现了 3 个相同的错误:

无法将 char[9] 转换为 char*(错误 n. C2664)

这些错误涉及变量ProcessNameModuleName

即使我知道 C++ 的良好基础知识,我也总是遇到指针问题。

对错误感兴趣的函数是这些 2:

bool AttachProcess(char *ProcessName) {
    HANDLE hPID = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    PROCESSENTRY32 procEntry;
    procEntry.dwSize = sizeof(procEntry);
    
    const WCHAR* procNameChar;
    int nChars = MultiByteToWideChar(CP_ACP, 0, ProcessName, -1, NULL, 0);
    procNameChar = new WCHAR[nChars];
    MultiByteToWideChar(CP_ACP, 0, ProcessName, -1, (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, 0, ModuleName, -1, NULL, 0);
    modNameChar = new WCHAR[nChars];
    MultiByteToWideChar(CP_ACP, 0, ModuleName, -1, (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[] )传递给一个 function ,它需要一个指向非 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"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM