经过搜索,我听说 UInt32 是 C# 的 C++ DWORD 等价物。我通过执行算术测试结果
*(DWORD*)(1 + 0x2C) //C++
(UInt32)(1 + 0x2C) //C#
它们产生完全不同的结果。有人可以告诉我 C# 中 DWORD 的正确匹配吗?
原文由 Newbie 发布,翻译遵循 CC BY-SA 4.0 许可协议
经过搜索,我听说 UInt32 是 C# 的 C++ DWORD 等价物。我通过执行算术测试结果
*(DWORD*)(1 + 0x2C) //C++
(UInt32)(1 + 0x2C) //C#
它们产生完全不同的结果。有人可以告诉我 C# 中 DWORD 的正确匹配吗?
原文由 Newbie 发布,翻译遵循 CC BY-SA 4.0 许可协议
你的两个片段做了完全不同的事情。在您的 C++ 代码中,出于某种奇怪的原因,您将值 (1 + 0x2C)
(写 45 的一种奇怪方式) 转换为 DWORD*
,然后取消引用它,就好像那个地址实际上是一个有效的内存位置。使用 C#,您只需在整数类型之间进行转换。
原文由 Benjamin Lindley 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您的示例使用
DWORD
作为指针,这很可能是无效指针。我假设您的意思是DWORD
本身。DWORD
定义为unsigned long
,它最终是一个 32 位无符号整数。uint
(System.UInt32
) 应该是匹配的。输出:45
输出:45