#include <Windows.h>
#include <stdio.h>
int WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
LPSTR szstring = "windows data type ,.string"; // 字符串,字符指针
CHAR lpstr[120]; //字符
DWORD dwMax = 0xFFFFFFFF; // 32 位无符号整数
DWORD dwOne = 0x1;
INT iMax = 0xffffffff;
INT iMin = 0x1;
MessageBox(NULL, szstring, "lpstr", MB_OK);
CopyMemory(lpstr, szstring, lstrlen(szstring) + 1);
MessageBox(NULL, lpstr, "char", MB_OK);
if (dwMax > dwOne)
{
MessageBox(NULL, "dwmax > dwone", "dword", MB_OK);
}
if (iMax < iMin)
{
MessageBox(NULL, "imax > imin", "int", MB_OK);
}
return 0;
}
防止乱码 使用TEXT()
基本数据类型
BOOL | |
---|---|
BYTE | |
CHAR | |
CONST | |
DWORD | |
DWORD32 | |
DWORD64 | |
FLOAT | |
HANDLE | |
HICON | |
HINSTANCE | |
HKEY | |
HMODLE | |
HWND | |
INT | |
INT_PTR | |
INT_32 | |
INT_64 | |
LOGN | |
LOGNLOGN | |
LOGN32 | |
LOGN64 | |
LPARAM | 消息的L参数 |
WPARAM | 消息的W参数 |
LPCSTR | windows (ANSI) 字符串常量 |
LPCTSTR | 根据环境配置,如果定义了UNICODE宏,则是LPCWSTR 类型,否则是LPCTSTR |
LPCWSTR | UNICODE 字符串常量 |
LPDWORD | 指向DWORD类型数据指针 |
LPSTR | windows (ANSI) 字符串变量 |
LPTSTR | 根据环境配置,如果定义了UNICODE宏,则是LPWSTR 类型,否则是LPSTR |
LPWSTR | UNICODE 字符串变量 |
SHORT | |
SIZE_T | |
TCAHR | |
UCHAR | |
UINT | |
ULONG | |
VOID | |
WCHAR | |
WINAPI | |
WORD |
命名规律
- 基本数据类型包括:BYTE、CHAR、WORD、SHORT、INT等。
- 指针类型的命令方式一般是在其指向的数据类型前加“LP”“P”,比如指向DWORD的指针类型为“LPDWORD”和“PDWORD”
- 各种句柄类型的命名方式一般都是在对象名前加“H”,比如位图(BITMAP)对应的句柄类型为“HBITMAP”。
- 无符号类型一般是以“U”开头,比如“INT”是符号类型,“UINT”是无符号类型
根据这些命名规律以及自己的经验看到一些没见过的数据类型也就能知道它的代表的意思
Windows参数简写
b 布尔
by BYTE
c chr 或WCHAR TCHAR
n short
i int
x、y 分别表示x 坐标,y 坐标
cx、cy 分别表示x 方向长度和y 方向长度
b 或f BOOL(int),f 代表“flag”
w WORD(无符号short)
l LONG 长整数
dw DWORD 无符号长整数
fn function 函数
s string 字符串
sz 以0 字节结尾的字符串
h 句柄
p 指针
lpfn 指向函数的长指针
cb 字节数
lpsz 指向以0 结尾的字符串的长指针
g_ 全局变量
c_ 常量
m_ 类数据成员
s_ 静态变量
CS_ 类风格选项
CW_ 创建窗口选项
DT_ 绘制文本选项
IDI_ 图标ID 号
IDC_ 光标ID 号
MB_ 消息框选项
SND_ 声音选项
WM_ 窗口消息
WS_ 窗口风格
rc 矩形
Windows数据类型与标准C数据类型的关系
查看Windows数据类型的定义可以看到,所有的windows数据类型都是由C数据类型经过类型重定义得到的。
DWORD实质上就是 unsigned long 数据类型,32位无符号整型。
HANDLE类型实质上是void,HANDLE定义为:
typedof PVOID HANDLE;
HANDLE实际上就是一个PVOID,那PVOID又是什么呢?typeof void *PVOID;
PVOID就是指向void的指针。
所有的Windows数据类型都是通过这种方式在SDK的头文件中进行定义的,它们都是来源于标准c的
windows数据类型于api
windows api函数的参数 ,返回值或者一些重要的数据类型都是使用的Windows的数据类型
比如 messageBox 函数
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
函数命名规则
Ex | 执行体函数,进程,线程,链表,对象属性,赋值,取值,加锁 |
---|---|
Ke | 内核函数,部分导出 |
Ki | 微内核函数,进程,线程CPU,调度,不导出 |
Ps | 执行体,进程,线程 |
Mm | 内存相关,导出 |
Mi | 内存相关函数Mm函数底层调用Mi,不导出 |
Io | 文件,io,设备,导出 |
CC | 文件缓存 |
Rtl | 运行库,字符串,执行体 |
Zw | SSDT,但是Zw不改变线程模式 |
Nt | Zw函数会调用到Nt,Zw本身不实现功能 |
Cm | 注册表 |
Hal | 硬件函数 |
Ob | 对象管理器,句柄,创建查询内核对象 |
Pnp | 电源管理 |
Psp | 执行体函数,使用ps 实现复杂功能 |