通过函数传递值

时间:2013-03-03 23:06:01

标签: function visual-c++ c++-cli readprocessmemory

我正在尝试在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()函数中定义所有内容。

由于

2 个答案:

答案 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;
}