_plugin_registerexprfunctionex

此函数用于注册由插件定义的表达式函数,以便用户可以在表达式中使用该函数。与 _plugin_registerexprfunction 不同的是,此函数还可以注册处理字符串参数类型的表达式函数。

bool _plugin_registerexprfunctionex(
    int pluginHandle,                  //插件句柄
    const char* name,                  //表达式函数的名称
    const ValueType & returnType,      //返回值类型
    const ValueType* argTypes,         //参数类型数组
    size_t argc,                       //参数数量
    CBPLUGINEXPRFUNCTIONEX cbFunction, //回调函数
    void* userdata                     //用户数据
);

参数

pluginHandle:

调用插件的句柄。

name:

表达式函数的名称。

returnType:

返回值类型。ValueType 的定义如下:

typedef enum
{
    ValueTypeNumber,
    ValueTypeString,
    // 以下类型不能用于值,仅用于注册
    ValueTypeAny,
    ValueTypeOptionalNumber,
    ValueTypeOptionalString,
    ValueTypeOptionalAny,
} ValueType;
argTypes:

参数类型数组

argc:

表达式函数的参数数量。

cbFunction:

回调函数,具有以下类型定义:

typedef struct
{
    const char* ptr; // 应使用 BridgeAlloc 分配
    bool isOwner; // 当设置为 true 时,将对 ptr 调用 BridgeFree
} StringValue;

typedef struct
{
    ValueType type;
    duint number;
    StringValue string;
} ExpressionValue;

typedef bool(*CBPLUGINEXPRFUNCTIONEX)(ExpressionValue* result, int argc, const ExpressionValue* argv, void* userdata);
userdata:

传递给回调函数的指针值,可供插件用来传递附加信息。

返回值

注册成功时返回 true,否则返回 false。