Windows API中的数据结构

值得说明的是,win32开发是C语言编程,因此,搞明白数据类型还是非常重要的。Windows API因为历史原因或者为了方便在windows.h中将一些数据类型用typedef或者define宏重新进行定义。

  • UINT表示C语言中的无符号整型unsigned int
  • PSTR表示字符串指针char *
  • WPARAM在16位时期的Windows中表示unsigned short int,而现在都是UINT
  • LPARAM表示long
  • WndProc函数的返回类型LRESULT实际上就是long
  • 入口函数WinMain被指定的WINAPI和WndProc被指定的CALLBACK都表示的是_stdcall,表示Windows和用户应用程序之间发生函数呼叫的参数传递方式。

另外,句柄是Windows API中大量使用的一种类型,比如HINSTANCE, HWND, HDC, HICON, HCUROR, HBRUSH。它们其实是一个32位的整数,代表某种特定的对象。据我所知这东西似乎也是单任务时期Windows的遗留产物,把同一个程序的不同实例进行标记,从而可以在它们之前进行内存上的继承。

Windows的变量遵从匈牙利表示法,用开头的小写字母表示变量的类型属性,比如:

  • szCmdLine中的sz表示结尾为”\0”的字符串
  • hInstance和hPrevInstance开头的字母h表示句柄handle
  • iCmdShow的起始字母i表示整型

而对于结构变量,比如MSG结构,就直接用msg表示;WNDCLASS结构wndclass; PaintStructure结构ps,等等。

现在看看,Windows的确有值得学习的地方,能够用C语言建起一个系统内核和应用层,再通过其他的语言对Windows APIs进行封装,构建COM, ATL, MFC, .NET等等更高的不同层次的开发层。现在在Visual Studio2015居然还嵌入了Java SE development,一个平台就可以编写Desktop, Mobile Phone, Android, iOS程序。以前就听闻Windows是最疼惜程序员的平台,就是太贵,不过现在Visual Studio 2015有免费授权的社区版Lisence可以用。

时间: 2024-10-10 17:05:07

Windows API中的数据结构的相关文章

Windows API中的坑

本文主页链接:Windows API中的坑 ExpandEnvironmentStrings 风险: 进程会继承其父进程的环境变量,在展开如%APPDATA%等目录时,有可能父进程对此环境变量进行过修改,那么可能你获取的就不是你想要的当前SESSION的%APPDATA%了. 建议: 使用SHGetFolderPath系列函数来做这件事. GetModuleFileName 风险: 在DLL中调用时,若传入的instance参数为NULL,那获取的将是加载DLL的进程的EXE的路径,若需要获取D

windows API中CreateWindow()函数详解

CreateWindow函数详解 在注册完窗口类后就需要进行窗口的创建,用到的函数理所当然就是CreateWindow(), 而这个函数是基于窗口类的,所以还需要指定几个参数来制定特定的窗口.而且像一些不带边框的窗口是怎么创建的也是具有相当的技巧的,就是创建的是不带标题和边框的窗口,然后自己在客户区绘制程序的内容,能够制作个性化的应用程序. API解释 该函数创建一个重叠式窗口.弹出式窗口或子窗口.它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的).函数也指该窗口的父窗口或所属

Windows API中几个函数的总结

[DllImport("User32.dll", EntryPoint = "FindWindow")] public static extern IntPtr FindWindow(String className, String captionName); [DllImport("User32.dll", EntryPoint = "FindWindowEx")] public static extern IntPtr F

在VBA中使用Windows API

VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个Office应用程序协同工作以完成单个应用程序无法完成的任务.然而,使用VBA仅能控制操作系统的一小部分.Windows API提供了控制操作系统绝大多数方面的功能.下面,介绍在VBA中使用Windows API的一些知识. 理解APIs API只是一组函数,可用于处理组件.应用程序或操作系统.通常

Windows API 错误码

在多数情况下,windows API在发生错误时很少抛出异常,多数是通过函数返回值进行处理.(windows api中无返回值的函数很少.) windows api错误处理通常按照以下方式:首先api函数返回特殊的值,表明函数内部发生错误:然后调用方可以使用GetLastError获得对应的错误码. 通常情况下windows api按照返回类型可以分为以下几类: 返回值为BOOL类型.有错误发生,返回值为0,否则返回非零值. 返回值为HANDLE类型.有错误发生时,返回NULL或INVALID_

C、C++控制台程序、Windows API程序、MFC程序理解与比较

在编程语言中,函数是一个很重要的概念,其身影无处不在.在面向过程的编程方式中,函数更是程序的基本构建模块,在面向对象的编程方式中,函数演变为类或对象的成员(当然也可以使用与类无关的函数).函数由函数头和函数体组成.函数头包括域属性(如external.static或类域).返回值类型.函数名.及参数.域属性包括其在多文件编程中的可见范围,是否是属于某一个类的成员?返回值类型是指函数返回的值的具体数据类型(可以理解为函数输出的一部分).函数名是函数保存在内存代码区的首地址,用于函数的调用及函数指针

windows进程中的内存结构(好多API,而且VC最聪明)

在阅读本文之前,如果你连堆栈是什么多不知道的话,请先阅读文章后面的基础知识.   接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据.那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论.下文中的C语言代码如没有特别声明,默认都使用VC编译的release版.   首先,来了解一下 C 语言的变量是如何在内存分部的.C 语言有全局变量(Global).本地变量(Local),静态变量(Static).寄存器变量(Regeister).每种变量都

Windows API的CreateFile()中的OPEN_ALWAYS和CREATE_ALWAYS之间的差异

转自:http://www.voidcn.com/article/p-uzrihrua-bte.html 任何人都可以解释Windows API的 CreateFile()功能的创建配置OPEN_ALWAYS和CREATE_ALWAYS之间的区别? 对我来说,似乎他们只是简单地“创建文件,如果它不存在”. 如果文件已经存在,CREATE_ALWAYS也会截断内容.另一方面,OPEN_ALWAYS不会破坏已经存在的文件. 以下是表格形式中不同值的工作原理: | When the file... T

Windows系统调用中API的3环部分(依据分析重写ReadProcessMemory函数)

Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API的3环部分 一.R3环API分析的重要性 Windows所提供给R3环的API,实质就是对操作系统接口的封装,其实现部分都是在R0实现的. 很多恶意程序会利用钩子来钩取这些API,从而达到截取内容,修改数据的意图. 现在我们使用olldbg对ReadProcessMemory进行跟踪分析,查看其在R3的实现,并根据我们的分析来重写一个