簡體   English   中英

'LPVOID': 非法將此類型用作表達式

[英]'LPVOID': illegal use of this type as an expression

如果我問了不好的問題,對不起,我不太了解動態鏈接庫

我將 -> 'LPVOID': 非法使用這種類型作為表達式

#include "pch.h"
#include <iostream>
#include <Windows.h>

圖書館

HANDLE handle;
HWND hwnd;
DWORD pID;

給手柄游戲的一些要求

template <class T>
T Read(DWORD address)
{
    T VALUE;
    ReadProcessMemory(handle, (LPVOID), &VALUE, sizeof(T), 0);
    return VALUE;
}

RPM 模板

void readingvariables()
{
    // 00DB0000 - sauerbraten.exe
    DWORD localplayer = Read<DWORD>(0x00DB0000 + 0x213EA8);
    int health = Read<int>(localplayer + 0x15C);
    printf("Health :", health);
}

在這里讀取變量

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        readingvariables();
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

最后在這里附上dll

好的,我正在等待答案,祝你有美好的一天:)

您沒有正確調用ReadProcessMemory() 您傳遞給它的類型是 memory 地址。 您忽略了傳遞給Read()address參數,這就是您應該將類型轉換為LPVOID的內容,例如:

template <class T>
T Read(DWORD address)
{
    T VALUE;
    if (!ReadProcessMemory(handle, (LPVOID)address, &VALUE, sizeof(T), NULL))
    {
        // error handling...
    }
    return VALUE;
}

你的問題在這里:

ReadProcessMemory(handle, (LPVOID), &VALUE, sizeof(T), 0);

第二個參數只是(LPVOID) ,它只是一個類型,但它需要是一個表達式。 您是否嘗試將某些內容投射到LPVOID

也許您的意思是(LPVOID)&VALUE(LPVOID)0

編譯器向您發出的錯誤消息應該給您這個行號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM