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 回答