C++返回浮子

C++ return float

本文关键字:返回 C++      更新时间:2023-10-16

我为游戏创建了一个API。

我的问题:我想从内存中读取浮点值。

结果(作弊引擎) 100

我使用 API 的结果:0.00000

extern "C" __declspec(dllexport) float samp_health()
{
    hwnd = FindWindow(NULL, L"MyGame");
    GetWindowThreadProcessId(hwnd, &pid);
    HANDLE phandle = OpenProcess(PROCESS_VM_READ, false, pid);
    float value = 0;
    ReadProcessMemory(phandle, (float*)(PlayerPointer + HealthOffset), &value, 4, NULL);
    CloseHandle(phandle);
    return value;
}

怎么了?

有了这一行,

HANDLE phandle = OpenProcess(PROCESS_VM_READ, false, pid);

您需要检查是否失败。

在接下来的这一行中,

ReadProcessMemory(phandle, (float*)(PlayerPointer + HealthOffset), &value, 4, NULL);

假设ReadProcessMemory工作原理大致如参数所示,则PlayerPointer在由 phandle 标识的进程中需要是一个有效的指针,如果HealthOffset是以字节为单位的偏移量,则PlayerPointer需要是指向字节的指针。

很可能不是。


读取进程内存通常不是进程之间通信的好方法。

以下是一些替代方案:

  • 不要做进程通信,做线程或其他什么。

  • 使用 Windows COM 技术。

  • 使用 Windows 邮箱。

  • 使用 Windows 窗口消息(例如 WM_DATA )。

  • 使用套接字。

  • 使用文件。

  • 使用管道。

几乎任何东西,只是不是直接访问进程内存。


综上所述,主要问题是使用了太低的抽象级别。