- int __cdecl
int __cdecl myFunction(int a, int b);
int __cdecl
是在函数声明中指定函数使用 C 调用约定的一种方式。
int
:表示函数的返回类型为整数型。__cdecl
:是一种调用约定,它指定函数参数从右向左入栈,由调用方清理堆栈的方式。
在 C 和 C++ 中,默认的调用约定通常是 __cdecl
。因此,即使不显式地指定 __cdecl
,函数也会默认采用这种调用约定。在一些情况下,特别是在 Windows 平台上,显式地声明函数采用 __cdecl
调用约定可以增加代码的可读性和可移植性,尤其是在与其他语言或者在动态链接库(DLL)中进行交互时。
因此,int __cdecl
意味着函数返回一个整数值,并使用 __cdecl
调用约定。
- #ifdef
typedef struct _STRING_EX
{
USHORT Length;
USHORT MaximumLength;
#ifdef UNICODE
PWSTER Buffer;
#else
PSTR Buffer;
#endif
} STRING_EX, *PSTRING_EX;
这段代码定义了一个名为 STRING_EX
的结构体,用于表示一个字符串。它包含了字符串的长度、最大长度以及指向字符串缓冲区的指针。
具体来说:
Length
:是一个无符号短整型 (USHORT
),表示字符串的实际长度。MaximumLength
:也是一个无符号短整型 (USHORT
),表示字符串缓冲区的最大容量。Buffer
:是一个指针,根据是否定义了UNICODE
宏,可以是指向宽字符 (PWCHAR
) 或者窄字符 (PCHAR
) 的指针。
这个结构体的设计允许在不同的字符集下使用不同的字符串类型,当定义了 UNICODE
宏时,Buffer
将会是一个指向宽字符的指针;否则,它将会是一个指向窄字符的指针。
最后,STRING_EX
被定义为 struct _STRING_EX
的别名,同时定义了一个指向 STRING_EX
结构体的指针类型 PSTRING_EX
。
- PTSTR和__T()
PTSTR s = __T("HELLO");
PTSTR
是一个宏定义,通常在 Windows 平台的 C 或 C++ 代码中使用。它是指向 TCHAR 类型(即字符类型的泛型)的指针,根据编译器设置的字符集,TCHAR 可以是 char 或 wchar_t 类型。
__T()
也是一个宏定义,它用于在不同字符集(ANSI 或 Unicode)之间进行转换。如果在代码中使用了 UNICODE
宏定义(或者 _UNICODE
宏定义),则 __T()
会将字符串转换为宽字符(wchar_t),否则它会保持字符串不变。
因此,PTSTR s = __T("HELLO");
的含义如下:
- 如果在编译时定义了
UNICODE
宏(或者_UNICODE
宏),那么s
将被定义为指向宽字符(wchar_t)的指针,并指向一个包含字符串 “HELLO” 的宽字符数组。 - 如果没有定义
UNICODE
宏(或者_UNICODE
宏),那么s
将被定义为指向字符(char)的指针,并指向一个包含字符串 “HELLO” 的字符数组。
这种方式可以使代码在不同的字符集设置下保持兼容性,同时支持 ANSI 和 Unicode 字符串。
(项目->工程的属性->高级->字符集)
4. void WINAPI
void WINAPI
是函数声明中的一部分,它指定了函数的返回类型和调用约定。
void
表示函数不返回任何值。这意味着该函数执行完毕后不会返回任何数据给调用方。WINAPI
是一种调用约定,它指定了函数参数从右向左入栈,由调用方清理堆栈的方式。在 Windows 平台上,WINAPI
调用约定通常用于声明 Windows API 函数。
因此,void WINAPI
声明的函数是一个不返回值的 Windows API 函数。这样的函数通常用于执行某些操作而不需要返回结果给调用方,比如执行系统级别的任务或者修改系统状态。
- IN
_IN_
是一种通常用于函数参数声明的标记,用于指示参数是一个输入参数。这种标记通常在函数声明中与参数一起使用,以便更清晰地表明参数的用途。
例如,考虑以下函数声明:
void SomeFunction(_IN_ int inputParam);
在这个声明中,_IN_
标记指示参数 inputParam
是一个输入参数。这意味着在调用 SomeFunction
函数时,它不会修改 inputParam
的值,而是只使用它作为输入来执行某些操作。
_IN_
是一种约定俗成的标记,不是 C 或 C++ 标准中定义的,它的作用主要是为了提高代码的可读性和可维护性。通常,这种标记可能会与其他标记一起使用,例如 _OUT_
用于指示输出参数。