深入理解API编程:从基础到实践
1. API结构体与大小确定
许多API结构体要求其中一个成员代表结构体的整体大小。在将用户定义类型(UDT)发送给API之前,可使用 Len(YourUDTVariable)
来确定其大小。在后续的示例中,会用到API所需的三种不同结构体,其中一个在调用API之前需要设置大小。
2. 指针和句柄
- 指针概念 :指针是内存块的地址。当声明VBA对象类型时,VBA会分配足够大的内存块来表示该对象,并为变量分配该内存块起始处的地址,此地址指向内存中的对象,这就是“指针”。将一个对象变量的值赋给另一个对象变量时,不会复制对象,而是创建对同一对象的两个不同引用,对象的指针被复制到新变量,但不会像创建全新对象那样分配新的内存块。理解指针概念对使用Windows API非常有帮助。
- 句柄概念 :句柄与指针类似,使用相同的数据类型,例如用
LongPtr
数据类型声明窗口句柄参数。但指针用于标识内存地址,而句柄用于唯一标识对象,如窗口、文件或其他系统资源。 - 32位和64位系统中的指针 :在32位应用程序中,指针是32位内存地址,约有42.9亿种可能的值;在64位应用程序中,指针是64位内存地址,提供了两倍的空间和指数级更多的可能值。
- VBA7的特殊关键字 :为应对从32位架构向64位的过渡以及应用程序和操作系统之间混合使用的需求,VBA7提供了两个特殊关键字