VC常用的Windows数据类型与ARM嵌入式C语言的数据类型

由于在ARM嵌入式的工作习惯,在使用VC的时候总是习惯性的要求自己清楚每个变量的数据类型长度。我想这并没什么坏处,但问题就出在WindowsAPI上。

在使用WindowsAPI的时候查看MSDN会发现很多Windows自己定义的数据类型,比如HANDLE这样的,咋一接触,让人莫名奇妙,接触久了之后发现,什么HANDLE啊,不就是个指针嘛,搞得这么神神秘秘的,虽然MSDN中有,但我觉得还是有必要将常用的Windows和ARM C数据类型列举一下以便以后查找:

VC Windows API

ARM C

Comments

WORD

unsigned short

32位无符号数

INT

int

32位有符号数

UINT

unsigned int

32位无符号数

UINT32

unsigned int

32位无符号数

DWORD

unsigned int

32位无符号数

PDWORD

unsigned int *

32位无符号数指针

WPARAM

unsigned int *

32位无符号数指针

CHAR

char

ASCII字符

UCHAR

unsigned char

无符号ASCII字符

PCHAR

char *

ASCII字符指针

PCSTR

const char *

常量字符指针

WCHAR

16-bit Unicode 字符

BYTE

unsigned char

8位无符号数

PBYTE

unsigned char *

8位无符号数指针

HANDLE

void *

可指向任何对象的指针

VOID

void

不定型

WINAPI

指定函数的参数传递规则为__stdcall

TCHAR

这是一个与UNICODE定义相关联的宏定义:

#ifdef UNICODE

 typedef WCHAR TCHAR;

#else

 typedef char TCHAR;

#endif

在使用VC的初期,对于字符串的处理是个很头痛的事情,因为老是涉及到UNICODE的问题,就我的经验,如果你的程序需要支持一种以上的语言,最好选择支持UNICODE,在编程的时候使用TCHAR来声明字符变量,使用LPTSTR来声明字符串,常用的几个字符串函数:

StrStr 在一个字符串中搜索子字符串,大小写敏感

StrStrI 在一个字符串中搜索子字符串,大小写不敏感

StrCpy 字符串拷贝

StrCmp 字符串比较

sprintf 可以将UNICODE字符串转换成ASCII字符串,只要第二个参数使用"%S"即可,注意是大写的S,CharToOem也可以打到同样目的。

wsprintf 则可以将ASCII字符串转换成UNICODE字符串,只要第二个参数使用"%s"即可,注意是小写的s,

使用OemToChar也可以打到同样目的。

 

对于VOID *也就是HANDLE,在Windows中最好不要理解为空类型指针,个人觉得将它看成万能指针最好,因为他可以表示指向所有类型的指针,而在嵌入式中也会大量使用这样的void *的方式来表示内存地址。

你可能感兴趣的:(编程,c,windows,嵌入式,语言,winapi)