原生对象指的是 C++ 这种原生语言实现的对象。
原生接口声明定义了原生对象提供哪些成员函数,以及这些成员函数的原型。 所有可用的原生类型请参考文档:
https://www.aardio.com/zh-cn/doc/library-guide/builtin/raw/datatype.html 原生接口声明一般指的是一个类。
com.interface 名字空间下面的所有类都是 COM 原生接口声明类。
com.interface 内部调用 raw.interface ,这种接口声明类的格式是兼容的。 以下是 IUnknown 接口声明类: 原生接口声明类必须创建一个结构体,
所有成员的原生类型必须是 ptr,而值必须用一个字符串声明原生函数原型。
原型里使用的原生类型与声明原生 API 使用的类型相同, 关于原生类型:https://www.aardio.com/zh-cn/doc/library-guide/builtin/raw/datatype.html 原生接口声明可以用一个字符串表示,每行声明一个成员函数原型。
参考:范例 - 使用 thiscall 调用 C++ 对象 示例: 用字符串声明接口时 aardio 会将其自动转换为前述的接口声明类。
这种写法只是将函数名直接写在原型里了,并且每行字符串表示一个成员函数。 com.interface 里则不支持用字符串声明接口类的方法,
因为所有 COM 接口类声明都必须定义 IID 静态成员,并且必须继承自 com.interface.IUnknown 。
这就要求 COM 接口声明必须是类( 但 com.interface 的参数支持用类名称表示 com.interface 下已导入的声明类 )。
展开用法说明
class IUnknown{
ptr QueryInterface = "int(struct iid,ptr &ptr)" ;
ptr AddRef = "int()" ;
ptr Release ="int()" ;
}
this = raw.interface( pTest,"
void getName(string &buffer,int len);
void getInfo(struct &pInfo);
","thiscall"
)
原生接口类。
兼容 C++ 类定义中用 virtual 关键字声明的成员函数。
兼容 COM 原生接口,com.interface 内部调用 raw.interface 。
如果参数 @1 指定原生接口对象指针或指针地址则导入原生对象接口。
如果参数 @1 指定纯表(无元表)或省略参数 @1(不用保留参数占位)则实现原生对象接口。
实现原生接口。
参数 @declInterface 指定接口声明,这是一个类(class)或字符串。
可选参数 @2 可指定 "stdcall", "cdecl", "fastcall" 调用约定,默认为 "stdcall"。
创建对象后,可添加与接口匹配的成员函数。
未定义成员在被调用时忽略并直接返回 0。
raw.interface(/*参数 @implPtr 指定原生接口指针或地址数值。
参数 @declInterface 指定接口声明,这是一个类(class)或字符串。
参数 @3 可省略,默认为 "stdcall" 。
*/,"
void getName(string &buffer,int len);
bool getInfo(struct &pInfo);
","thiscall"
)
实现原生接口。
参数 @1 必须是纯表(不能有元表),并定义与接口匹配的成员函数(被调用时忽略未定义成员)。
参数 @declInterface 指定接口声明,这是一个类(class)或字符串。
可选参数 @3 可指定 "stdcall", "cdecl", "fastcall" 调用约定,默认为 "stdcall"。。