我刚开始学习WinAPI,偶然发现了函数的不同变量。
现在,我正在为ReadProcessMemory奋斗。
代码是:

ReadProcessMemory(phandle, (LPVOID)address, &value , sizeof(value), 0);


现在,我知道第一个参数是进程的句柄,但是我不明白为什么第二个参数(指向基地址的指针)必须是地址的空白(LPVOID)。

在MSDN中它说:
指向要从中读取的指定进程中的基地址的指针。在进行任何数据传输之前,系统会验证基址和指定大小的内存中的所有数据是否可以读取访问,如果无法访问,则该功能将失败。

那么为什么它必须是(LPVOID)地址,而不仅仅是第二个参数的地址?

最佳答案

好吧,lpBaseAddress是...地址,因此有意义的是其类型应为指针。它指向什么类型?我们不知道,这个(WinApi)是C,所以没有模板-因此是void *。另外,我们也不想修改内存,因此const是很好的方法。

关于您的编辑(为什么要强制转换):它取决于address的类型。任何非volatile对象指针都可以隐式转换为void const *,因此在这种情况下,不需要强制转换。不过,我想该地址是一个已知的integer常量,在这种情况下,需要一个reinterpret_cast才能将其转换为指针。这是在C样式转换的不良样式下完成的,但可以达到相同的目的。

关于c++ - C++ WinAPI ReadProcessMemory,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47459679/

10-13 06:18