C++ 如何在c++;?

C++ 如何在c++;?,c++,casting,C++,Casting,这是我的函数的定义,我尝试将dwAddress(一个DWORD)强制转换为带有reinterpret_强制转换(dwAddress)的空指针: 模板 内联布尔读取(DWORD dwAddress、T和Value){ 返回ReadProcessMemory(m_HProcess,reinterpret_cast(dwAddress),Value,sizeof(T),NULL)==true; } 这就是我调用函数的地方: DWORD testValue = 1; if(Memory

这是我的函数的定义,我尝试将dwAddress(一个DWORD)强制转换为带有reinterpret_强制转换(dwAddress)的空指针:

模板
内联布尔读取(DWORD dwAddress、T和Value){
返回ReadProcessMemory(m_HProcess,reinterpret_cast(dwAddress),Value,sizeof(T),NULL)==true;
}
这就是我调用函数的地方:

DWORD testValue = 1;
        if(MemoryManager->Read<DWORD>(dwClientBase+dwForceAttack,testValue))
dwordtestvalue=1;
if(MemoryManager->Read(dwClientBase+dwForceAttack,testValue))
这是我的错误:

C:\Users\...\CLionProjects\...\CMemoryManager.h: In instantiation of 'bool CMemoryManager::Read(DWORD, T&) [with T = long unsigned int; DWORD = long unsigned int]':
C:\Users\...\CLionProjects\...\main.cpp:23:75:   required from here
C:\Users\...\CLionProjects\...\CMemoryManager.h:28:33: error: invalid conversion from 'long unsigned int' to 'PVOID' {aka 'void*'} [-fpermissive]
         return ReadProcessMemory(m_HProcess, reinterpret_cast<LPVOID>(dwAddress), Value, sizeof(T), NULL) == true;
                ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Users\...\CLionProjects\...\CMemoryManager.h:7,
                 from C:\Users\...\CLionProjects\...\main.cpp:2:
c:\mingw\include\winbase.h:2260:59: note:   initializing argument 3 of 'BOOL ReadProcessMemory(HANDLE, PCVOID, PVOID, DWORD, PDWORD)'
 WINBASEAPI BOOL WINAPI ReadProcessMemory (HANDLE, PCVOID, PVOID, DWORD, PDWORD);
C:\Users\…\CLionProjects\…\CMemoryManager.h:在“bool CMemoryManager::Read(DWORD,T&)[with T=long unsigned int;DWORD=long unsigned int]的实例化中:
C:\Users\…\CLionProjects\…\main.cpp:23:75:此处为必填项
C:\Users\…\CLionProjects\…\CMemoryManager.h:28:33:错误:从'long unsigned int'到'PVOID'{aka'void*'}[-fppermissive]的转换无效
返回ReadProcessMemory(m_HProcess,reinterpret_cast(dwAddress),Value,sizeof(T),NULL)==true;
~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在C:\Users\…\CLionProjects\…\CMemoryManager.h:7中包含的文件中,
来自C:\Users\…\CLionProjects\…\main.cpp:2:
c:\mingw\include\winbase.h:2260:59:注意:初始化“BOOL ReadProcessMemory(HANDLE、PCVOID、PVOID、DWORD、PDWORD)”的参数3
WINBASEAPI BOOL WINAPI ReadProcessMemory(句柄、PCVOID、PVOID、DWORD、PDWORD);

我不明白为什么演员不起作用。我已经尝试了很多不同的强制转换方法,但是没有任何效果。

您还需要强制转换ReadProcessMemory调用中的第三个参数

reinterpret_cast<LPVOID>(Value)
reinterpret\u cast(值)

请记住,您必须针对与目标进程相同的体系结构进行编译,如果您的目标是x64,那么您也必须是x64。

问题似乎在于
而不是
dwAddress
请注意
DWORD
仅为32位。这在64位系统上是行不通的哇,你说得对。。。。Thank youRemember;强制转换只是告诉编译器将某些类型视为其他类型。它不会神奇地将一种类型转换为另一种类型。谢谢你们。。。我解决了。
reinterpret_cast<LPVOID>(Value)