Win32 函数原型

原创 2004年07月14日 01:23:00

Win32函数原型分为普通、ANSIUnicode三种。其实如果严格地说,并不能有普通这种分法,也就是只有ANSIUnicode这两种。普通,一般都是MSDN开发文档中直接给出的形式。比如,下面是SetWindowText的普通原型:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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   *

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

 

 

函数的原型。。。原型链

对于这个名词一直感觉模模糊糊不是很清晰,先把理解到的写一写理清思路吧。对象成员包括属性和方法。 一个被命名的对象成员可以包含任何数据类型。既然函数也是一种对象,那么对象成员除了传统数据类型之外,还可...
  • qq_31123547
  • qq_31123547
  • 2015年10月31日 08:54
  • 335

函数声明、函数原型、函数定义

对函数的“定义”和“声明”不是一回事。“定义”是指对函数功能的确立,包括指定函数名,函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单位。而“声明” 的作用则是把函数的名字、函数类型以及形参...
  • zhongguoren666
  • zhongguoren666
  • 2013年01月07日 17:20
  • 8799

函数原型,函数声明,函数定义,他们的三角关系

前景提示:    c语言的标准从K&Rc,c89(ANSI c),c99,c11不断的发展,新标准不断的提出。但是,目前大部分编译器对c89完全支持,其他的标准可能就只是部分支持。c89是在K&Rc...
  • wjhyxr
  • wjhyxr
  • 2016年05月14日 15:51
  • 1491

C++ 函数原型

一,函数原型语法 函数原型是一条语句,因此必须使用分号结束。获得原型最简单的方法是复制函数定义中的函数头。函数原型不要求提供变量名,有类型列表就可以了。 二,为什么需要函数原型? 函数原型描述了函数到...
  • cloud323
  • cloud323
  • 2017年04月01日 09:58
  • 984

完整原型链详细图解(构造函数、原型、实例化对象)

一、首先说一下什么是构造函数: 构造函数:用来在创建对象时初始化对象。特点:构造函数名一般为大写字母开头;与new运算符一起使用来实例化对象。 举例: function Person(){} ...
  • SpicyBoiledFish
  • SpicyBoiledFish
  • 2017年05月03日 14:28
  • 1460

C 函数声明, 函数原型, 函数定义

函数声明的发展1 隐式函数声明 implicit function declaration main 函数和 printf 函数返回值类型为 int, 若不声明, 编译器默认函数返回值为 int 类型...
  • why19911024
  • why19911024
  • 2016年11月04日 12:22
  • 1863

Linux下C语言main函数的原型

今天在研究dhcpd代码的时候,发现在dhcpcd.c中,main函数的写法为: int main(argn,argc,argv) int argn; char *argc[],*argv[];...
  • zxwangyun
  • zxwangyun
  • 2013年12月09日 11:06
  • 2154

JS----构造函数与原型prototype 区别

构造函数方法很好用,但是存在一个浪费内存 通过原型法分配的函数是所有对象共享的. 通过原型法分配的属性是独立.-----如果你不修改属性,他们是共享...
  • damys
  • damys
  • 2015年07月22日 17:16
  • 1939

js关于原型构造函数和原型链的理解

js的面向对象方式的函数有hen'duo'z
  • ljinkai_ljk
  • ljinkai_ljk
  • 2014年06月29日 00:28
  • 593

JavaScript中原型对象的彻底理解

一、什么是原型 原型是Javascript中的继承的继承,JavaScript的继承就是基于原型的继承。 1.1 函数的原型对象​ 在JavaScript中,我们创建一个函数A(就是声明一个...
  • u012468376
  • u012468376
  • 2016年11月10日 20:43
  • 10580
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Win32 函数原型
举报原因:
原因补充:

(最多只允许输入30个字)