IntPtr到Uint32? C#

时间:2009-04-25 07:10:47

标签: c# intptr

我需要调用VirtualAllocEx并返回IntPtr。 我调用该函数来获取一个空地址,以便我可以在那里编写我的编解码器(这是在另一个过程中)。

如何将结果转换为UInt32,所以我最近可以用该地址调用WriteProcessMemory()?

3 个答案:

答案 0 :(得分:2)

当你调用WriteProcessMemory时,你应该传递一个IntPtr作为地址而不是UInt32(因为WriteProcessMemory需要一个指针,而不是一个整数)。因此,您应该能够直接使用VirtualAllocEx返回的IntPtr,而无需将其转换为UInt32。

答案 1 :(得分:1)

你可以用(uint)ptr投射它我相信(如果不能很好地投射,请先尝试ptr.ToInt32()或ToInt64()。至少我不知道这种方法有什么问题,虽然没有使用它 - 但是很多。鉴于UInt32的范围比Int32大,而在非负方面则与Int64相同,因此它应该足够好了。

虽然不确定Int32在64位架构上的表现如何。我觉得很糟糕,因为IntPtr的原因是提供平台独立的方式来存储指针。

答案 2 :(得分:0)

您的DLlImport for WriteProcessMemory不正确,基地址是指针,因此应将其定义为IntPtr。

MSDN

您需要修复DllImport语句。