0

VisualC ++でReadProcessMemoryとWriteProcessMemoryの独自の関数を作成しようとしているので、新しい関数呼び出しを作成するたびにすべての情報を入力し続ける必要はありません。このプロジェクトはWindowsフォームです。ここに問題があります

void Read(DWORD Add, int Value);

private: System::Void btnP1Money_Click_1(System::Object^  sender, System::EventArgs^e) 
{   
int BigMoney = 100000;
int GetMoneyValue;
DWORD MonAddr = 0x180A6C8;

Read(MonAddr, GetMoneyValue);
}


void Read(DWORD Add, int Value)
{
HWND window = FindWindow(0, _T("Process Window Name"));
DWORD pID = NULL;
DWORD base = dwGetModuleBaseAddress(pID, _T("Game.exe"));
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);
GetWindowThreadProcessId(window, &pID);

ReadProcessMemory(handle, (LPCVOID)(base+Add), &Value, 4, NULL);
}

ゲームの値は500ですが、Read()から返される値は0です。何が間違っているのかわかりません。ボタンをクリックしてチェックボックスをオンにするたびに、Read()関数ですべてを定義する必要はありません。

ありがとう

4

2 に答える 2

1

int参照で渡す必要があります。そうしないと、関数は:の独自のコピーを取得します。

void Read(DWORD Add, int& Value);

または、次の値を返すこともできます。

int Read(DWORD Add, int Value)
{
  ....
  return Value;
}
于 2013-03-03T23:07:07.190 に答える
1

Readヘッダーを次のように変更する必要があります

void Read(DWORD Add, int& Value)

私はうまくいく小さな例を書きました。アドレスではなく、変数の内容を確認してください

void Read(int& Value)
{
    Value++;
}

int main(array<System::String ^> ^args)
{
    int GetMoneyValue = 5;
    Read(GetMoneyValue);

    Console::WriteLine(GetMoneyValue);
    //6;
    return 0;
}
于 2013-03-04T12:26:19.577 に答える