我正在尝试在VisualC ++中为ReadProcessMemory和WriteProcessMemory创建自己的函数,因此每次创建新函数调用时都不必继续输入所有信息。这个项目是Windows Form。这是问题
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()函数中定义所有内容。
由于
答案 0 :(得分:1)
您需要通过引用传递,否则该函数将获得自己的int
:
void Read(DWORD Add, int& Value);
或者,您可以返回值:
int Read(DWORD Add, int Value)
{
....
return Value;
}
答案 1 :(得分: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;
}