in WinAPI:
typedef unsigned long DWORD;
I think DWORD, WORD … is the basic data type in computer, for no matter int, unsigned long… it will be converted to DWORD finally in assembly, why should it be converted to unsigned long here? Can’t I use DWORD directly without the difinition?
DWORD is whatever it is defined to be (there is no automatic translation to a specific width in assembly). This typedef is needed because the WinAPI interfaces are all defined with unsigned longs wherever DWORD is used. IOW, you need this definition in place to work with the API.
To answer your other question. This answer is no, DWORD can’t be used without a definition. It isn’t a built-in type for the compiler.
The definition of DWORD is fixed for the Win32 API: http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx