CSDN博客

img goodname008

Win32 函数原型

发表于2004/7/14 1:23:00  2782人阅读

分类: Visual Basic VC/MFC

Win32函数原型分为普通、ANSIUnicode三种。其实如果严格地说,并不能有普通这种分法,也就是只有ANSIUnicode这两种。普通,一般都是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

 

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

LPCWSTR

 

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

 

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

 

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

 

 

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

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

*  作者:卢培培(goodname008              *

*  邮箱:goodname008@163.com                *

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

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

 

 

0 0

相关博文

我的热门文章

img
取 消
img