Win32 函数原型

王朝system·作者佚名  2006-01-30
窄屏简体版  字體: |||超大  

Win32函数原型分为普通、ANSI和Unicode三种。其实如果严格地说,并不能有普通这种分法,也就是只有ANSI和Unicode这两种。普通,一般都是MSDN开发文档中直接给出的形式。比如,下面是SetWindowText的普通原型:

BOOL SetWindowText(HWND hwnd, LPCTSTR lpText);

实际上,包含SetWindowText函数声明的头文件具体是用宏实现的:

#ifdef UNICODE

#define SetWindowText SetWindowTextW

#else

#define SetWindowText SetWindowTextA

#endif // !UNICODE

预处理程序会根据是否定义了UNICODE将宏进行替换,替换后的函数不是ANSI版本就是Unicode版本。函数末尾的“A”代表“ANSI”,而“W”代表“Wide”。头文件中也分别包含了两种不同版本的函数原型声明:

ANSI原型:

BOOL WINAPI SetWindowTextA(HWND hWnd, LPCSTR lpString);

Unicode原型:

BOOL WINAPI SetWindowTextW(HWND hWnd, LPCWSTR lpString);

下面是winuser.h头文件中SetWindowText函数的声明及宏定义:

WINUSERAPI

BOOL

WINAPI

SetWindowTextA(

HWND hWnd,

LPCSTR lpString);

WINUSERAPI

BOOL

WINAPI

SetWindowTextW(

HWND hWnd,

LPCWSTR lpString);

#ifdef UNICODE

#define SetWindowText SetWindowTextW

#else

#define SetWindowText SetWindowTextA

#endif // !UNICODE

注意,在使用字符串参数时,普通原型使用的是LPCTSTR,ANSI原型使用的是LPCSTR,而Unicode原型使用的是LPCWSTR。

我们通常在自己的程序中使用普通原型的函数,在需要的时候才定义UNICODE,此时将使用函数的Unicode版本。如果不定义UNICODE,则默认使用函数的ANSI版本。当然,我们也可以在调用函数时,直接显示地使用ANSI版本或Unicode版本,具体方法就是在普通原型的函数加上“A”或者“W”,但我不太提倡这样做,因为容易发生混淆。

这种方法通常应用在使用字符串参数的函数中,一般情况下都是按正常的方式使用。什么是正常的方式?正常人用的都是正常的方式,你是正常人吗?呵呵。由于VB中使用的是Unicode,所以在VB中使用时一定要注意,我想熟悉VB的人这一点都很清楚。以“W”结尾的函数中的字符串参数均使用wide-character,即我们通常情况下看到的一个英文字符或一个汉字用2个字节存储,而有的函数是仅有Unicode版本的。

MSDN开发文档中关于函数的说明部分都有一个QuickInfo,QuickInfo中会说明该函数是否同时含有ANSI版本和Unicode版本。

*-------------------------------------------*

* 转载请通知作者并注明出处,CSDN欢迎您! *

* 作者:卢培培(goodname008) *

* 邮箱:goodname008@163.com *

* 专栏:http://blog.csdn.net/goodname008 *

*-------------------------------------------*

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航