【发布时间】:2011-12-31 03:12:35
【问题描述】:
在 WinAPI 中:
typedef unsigned long DWORD;
我认为DWORD、WORD……是计算机中的基本数据类型,不管是int、unsigned long……最后在汇编中都会转换成DWORD,为什么这里要转换成unsigned long呢?不加定义就不能直接用DWORD吗?
【问题讨论】:
标签: winapi assembly word dword
在 WinAPI 中:
typedef unsigned long DWORD;
我认为DWORD、WORD……是计算机中的基本数据类型,不管是int、unsigned long……最后在汇编中都会转换成DWORD,为什么这里要转换成unsigned long呢?不加定义就不能直接用DWORD吗?
【问题讨论】:
标签: winapi assembly word dword
DWORD 是它被定义的任何内容(在程序集中没有自动转换为特定宽度)。这个 typedef 是必需的,因为 WinAPI 接口都是用无符号长整数定义的,只要使用 DWORD。 IOW,您需要此定义才能使用 API。
回答您的其他问题。这个答案是否定的,没有定义就不能使用 DWORD。它不是编译器的内置类型。
Win32 API 的 DWORD 定义是固定的:http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx
【讨论】:
在 Windows API 和基于 x86 指令集的汇编语言中,DWORD 指定一个大小为 32 位的变量。所以是的,它通常是相同的大小。
你不能在 C++ 中使用类型 DWORD 而不定义它,因为它不是核心语言的一部分。 DWORD 的类型定义可能需要根据您的编译器和系统架构进行调整。显然,对于您的配置,unsigned long 类型有 32 位,因此 DWORD 定义为unsigned long。
【讨论】:
DWORD 表示相同的意思,因为DWORD 是英特尔在指令集中定义的。 MIPS 或 PowerPC 或 ARM CPU 的汇编程序根本不会使用 DWORD,或者具有相同的含义,除非这些 CPU 也定义了该术语