aardio 文档
aardio 范例: 结构体
相关文档
//结构体
import console;
/*
在 aardio 中结构体就是表对象,
但在每个成员名前指定了该成员的原生类型。
如下 x,y 成员的类型就是 int 类型(32位有符号整数,大写表示32位无符号整数)。
相关文档: https://www.aardio.com/zh-cn/doc/library-guide/builtin/raw/struct.html
*/
var pt = {
int x;
int y;
}
/*
注意:原生类型必须写在结构体或者 API 声明内部。
*/
//结构体传入 API 参数会自动转换为原生结构体指针(调用结束自动释放原生指针)
::User32.GetCursorPos(pt);
console.log(pt.x,pt.y);
/*
不声明直接调用 API 时,所有结构体参数都是输出参数。
所以下面这样写也是可以的:
*/
var ret,pt = ::User32.GetCursorPos({int x;int y;});
//结构体会自动初始化,所以 0, null, false 等值不必如下显式指定。
var ret,pt = ::User32.GetCursorPos({int x = 0;int y = 0;});
//我们可以用 class 声明结构体类型
class PT{
int x;
int y;
}
//用结构体类型创建结构体
var pt = PT();
::User32.GetCursorPos(pt);
//aardio 已经默认声明了 ::POINT,::RECT 这些常用结构体
var pt = ::POINT();
::User32.GetCursorPos(pt);
console.log(pt.x,pt.y);
//结构体在调用 API 时转换为原生指针,调用结束释放原生指针。
//如果不想在调用结束自动释放结构体指针,就需要先将结构体复制到内存,如下。
var ptBuffer = raw.buffer({int x;int y;});
::User32.GetCursorPos(ptBuffer);//使用结构体指针作为参数调用 API
var pt = raw.convert(ptBuffer,{int x;int y;});//自内存中还原结构体
console.log(pt.x,pt.y);
console.pause();
Markdown 格式