【发布时间】:2015-11-13 10:54:40
【问题描述】:
下面的sn-p可以转成C#.NET吗?
template <class cData>
cData Read(DWORD dwAddress)
{
cData cRead; //Generic Variable To Store Data
ReadProcessMemory(hProcess, (LPVOID)dwAddress, &cRead, sizeof(cData), NULL); //Win API - Reads Data At Specified Location
return cRead; //Returns Value At Specified dwAddress
}
当您想在 C++ 中从内存中读取数据时,这非常有用,因为它是通用的:您可以使用 Read<"int">(0x00)" 或 Read<"vector">(0x00) 并将它们全部集成到一个函数中。
在 C#.NET 中,它对我不起作用,因为要读取内存,您需要具有预定义参数的 DLLImport ReadProcessMemory,这些参数当然不是通用的。
【问题讨论】:
-
也许你可以使用这里建议的策略:stackoverflow.com/a/6336196/3150802。但不可否认,我不确定如何将它打包成一个简洁的一次性通用函数。也许会强制用于读取的类实现某种可序列化的接口。
-
对于值类型(仅包含非托管数据的结构),您可能只使用内存地址作为指向结构的指针并返回该实例的副本,完全通用,带有
where T: struct约束类型参数。 -
在下面的新非“答案”中,您突然说您想要返回一个向量。你能澄清一下(当然是在这个原始帖子中)吗?这个问题很有趣,但如果给定地址有一个 int,我不明白为什么要生成一个向量。
标签: c# c++ generics readprocessmemory