aardio 文档

raw.interface 库模块帮助文档

展开用法说明

原生对象指的是 C++ 这种原生语言实现的对象。 原生接口声明定义了原生对象提供哪些成员函数,以及这些成员函数的原型。

所有可用的原生类型请参考文档: https://www.aardio.com/zh-cn/doc/library-guide/builtin/raw/datatype.html

原生接口声明一般指的是一个类。 com.interface 名字空间下面的所有类都是 COM 原生接口声明类。 com.interface 内部调用 raw.interface ,这种接口声明类的格式是兼容的。

以下是 IUnknown 接口声明类:

class IUnknown{
    ptr QueryInterface = "int(struct iid,ptr &ptr)" ;
    ptr AddRef = "int()" ;
    ptr Release ="int()" ;
}

原生接口声明类必须创建一个结构体, 所有成员的原生类型必须是 ptr,而值必须用一个字符串声明原生函数原型。 原型里使用的原生类型与声明原生 API 使用的类型相同,

关于原生类型:https://www.aardio.com/zh-cn/doc/library-guide/builtin/raw/datatype.html

原生接口声明可以用一个字符串表示,每行声明一个成员函数原型。 参考:范例 - 使用 thiscall 调用 C++ 对象

示例:

this = raw.interface( pTest,"
    void getName(string &buffer,int len);
    void getInfo(struct &pInfo); 
    ","thiscall"  
)

用字符串声明接口时 aardio 会将其自动转换为前述的接口声明类。 这种写法只是将函数名直接写在原型里了,并且每行字符串表示一个成员函数。

com.interface 里则不支持用字符串声明接口类的方法, 因为所有 COM 接口类声明都必须定义 IID 静态成员,并且必须继承自 com.interface.IUnknown 。 这就要求 COM 接口声明必须是类( 但 com.interface 的参数支持用类名称表示 com.interface 下已导入的声明类 )。

范例 - 使用 thiscall 调用 C++ 对象

raw 成员列表 #

raw.interface #

原生接口类。
兼容 C++ 类定义中用 virtual 关键字声明的成员函数。
兼容 COM 原生接口,com.interface 内部调用 raw.interface 。

如果参数 @1 指定原生接口对象指针或指针地址则导入原生对象接口。
如果参数 @1 指定纯表(无元表)或省略参数 @1(不用保留参数占位)则实现原生对象接口。

raw.interface(declInterface,callingConvention) #

实现原生接口。
参数 @declInterface 指定接口声明,这是一个类(class)或字符串。
可选参数 @2 可指定 "stdcall", "cdecl", "fastcall" 调用约定,默认为 "stdcall"。
创建对象后,可添加与接口匹配的成员函数。
未定义成员在被调用时忽略并直接返回 0。

raw.interface(implPtr,declInterface,callingConvention) #

raw.interface(/*参数 @implPtr 指定原生接口指针或地址数值。  
参数 @declInterface 指定接口声明,这是一个类(class)或字符串。  
参数 @3 可省略,默认为 "stdcall" 。  
*/,"  
    void getName(string &buffer,int len);  
    bool getInfo(struct &pInfo);   
    ","thiscall"  
)

raw.interface(implTable,declInterface,callingConvention) #

实现原生接口。
参数 @1 必须是纯表(不能有元表),并定义与接口匹配的成员函数(被调用时忽略未定义成员)。
参数 @declInterface 指定接口声明,这是一个类(class)或字符串。
可选参数 @3 可指定 "stdcall", "cdecl", "fastcall" 调用约定,默认为 "stdcall"。。

Markdown 格式