/********************************************************************* *文件说明: 脚本模块功能支持 *作者: 37 *日期: 2018/11/09 *修改日志: 2018/11/09 logos 创建 2018/12/12 增加if/elseif/else 控制语句 ***********************************************************************/ #pragma once #ifndef _DLL_INCLUDE_JS_H #define _DLL_INCLUDE_JS_H #ifndef EXPORT_C #define EXPORT_C extern "C" #endif #ifndef WINAPI #define WINAPI __stdcall #endif /*支持的运算符以及优先级,越靠前越优先 1. ! - ++ -- ~ //前置运算符 2. * / % //算术运算符 3. + - //算术运算符 4. << >> //按位移动运算符 5. < <= > >= //逻辑判断运算符 6. == != //逻辑判断运算符 7. & //按位与 8. ^ //按位异或 9. | //按位或 10. && //逻辑与 11. || //逻辑或 12. = += -= *= /= //赋值运算符 */ class ijres {//脚本结果类接口 public: /**************************************************** *Function: 释放对象 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 由script_calculate/script_calculate2 接口返回的对象需要调用此接口释放 ******************************************************/ virtual void free() = 0; /**************************************************** *Function: 获取对象类型 *Intput: NULL *Output: NULL *Return: 返回类型,0str 1int 2double ******************************************************/ virtual int type() = 0; /**************************************************** *Function: 获取对象结果 *Intput: NULL *Output: NULL *Return: 返回结果 ******************************************************/ virtual int geti() = 0; //str返回0 double返回int virtual double getd() = 0; //str返回0 virtual const char* gets() = 0; //若类型为int/double 则格式化到字符串再返回 /**************************************************** *Function: 设置对象结果 *Intput: val int/double/string *Output: NULL *Return: NULL ******************************************************/ virtual void set(int val) = 0; virtual void set(double val) = 0; virtual void set(const char* val) = 0; }; //导出接口 EXPORT_C void WINAPI ijres_free(ijres* p); EXPORT_C int WINAPI ijres_type(ijres* p); EXPORT_C int WINAPI ijres_geti(ijres* p); EXPORT_C double WINAPI ijres_getd(ijres* p); EXPORT_C int WINAPI ijres_gets(ijres* p, char* val); EXPORT_C void WINAPI ijres_seti(ijres* p, int val); EXPORT_C void WINAPI ijres_setd(ijres* p, double val); EXPORT_C void WINAPI ijres_sets(ijres* p, const char* val); typedef ijres* pjres; typedef struct jstack* pstack; //脚本堆栈句柄 //p 脚本堆栈句柄 //r 运算结果 函数的返回结果放在这里 //err 错误消息返回接收区 //lparam 附加参数 //btest 1参数检查 or 0执行 //return: 函数执行成功返回0,失败返回错误码,若返回失败,则脚本执行会失败 //PS: btest为1时,仅检查参数 typedef int (WINAPI *jsfun)(pstack p, pjres r, char* err, int btest); /**************************************************** *Function: 初始化脚本模块 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI script_init(); /**************************************************** *Function: 释放脚本模块 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI script_deinit(); /**************************************************** *Function: 重新加载 *Intput: NULL *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI script_reload(); /**************************************************** *Function: 往脚本模块注册整型常量值 *Intput: pszname 脚本中的常量名称 <32字节 val 对应的值 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 必须在脚本运行前注册,否则脚本编译会报错 ******************************************************/ EXPORT_C int WINAPI script_reg_const_int(const char* pszname, int val); /**************************************************** *Function: 往脚本模块注册浮点型常量值 *Intput: pszname 脚本中的常量名称 <32字节 val 对应的值 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 必须在脚本运行前注册,否则脚本编译会报错 ******************************************************/ EXPORT_C int WINAPI script_reg_const_double(const char* pszname, double val); /**************************************************** *Function: 往脚本模块注册字符串常量值 *Intput: pszname 脚本中的常量名称 <32字节 val 对应的值 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 必须在脚本运行前注册,否则脚本编译会报错 ******************************************************/ EXPORT_C int WINAPI script_reg_const_string(const char* pszname, const char* val); /**************************************************** *Function: 往脚本模块注册自定义函数 *Intput: pszname 脚本中的函数名称 <32字节 f 对应的函数指针 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 必须在脚本运行前注册,否则脚本编译会报错 ******************************************************/ EXPORT_C int WINAPI script_reg_fun(const char* pszname, jsfun f); /**************************************************** *Function: 执行一个明文脚本 *Intput: pszcmd 脚本内容 err 错误消息接收区 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI script_run(const char* pszcmd, char* err = 0); /**************************************************** *Function: 编译一个明文脚本,返回脚本堆栈句柄 *Intput: pszcmd 脚本内容 err 错误消息接收区 *Output: NULL *Return: 成功返回堆栈句柄,失败返回NULL *PS:调用此接口时,会调用自定义函数进行参数检查 ******************************************************/ EXPORT_C pstack WINAPI script_compile(const char* pszcmd, char* err = 0); /**************************************************** *Function: 释放一个脚本堆栈 *Intput: p 堆栈句柄 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS: 传入句柄必须是由script_compile接口返回的 ******************************************************/ EXPORT_C int WINAPI script_free(pstack p); /**************************************************** *Function: 执行一个脚本堆栈,不需要返回结果 *Intput: p 堆栈句柄 err 错误消息接收区 *Output: NULL *Return: 成功返回0,失败返回错误码 ******************************************************/ EXPORT_C int WINAPI script_execute(pstack p, char* err = 0); /**************************************************** *Function: 计算脚本堆栈值,需要返回结果 -- 支持单段 *Intput: p 堆栈句柄 err 错误消息接收区 *Output: NULL *Return: 成功返回pjres句柄,失败返回NULL *PS:此接口主要用于计算一段脚本返回值,若有多段脚本,则会返回错误 如: a+1 -- ok a+b*4 -- ok a+b,a-1 -- error a+b a-1 -- error ******************************************************/ EXPORT_C pjres WINAPI script_calculate(pstack p, char* err = 0); /**************************************************** *Function: 计算脚本堆栈,需要返回结果 -- 支持单段/多段 *Intput: p 堆栈句柄指针,执行一次后会自动指向下一段堆栈 err 错误消息接收区 *Output: NULL *Return: 成功返回pjres句柄,失败返回NULL *PS:此接口主要用于计算多段脚本返回值 如: a+1 -- ok p=NULL a+b*4 -- ok p=NULL a+b,a-1 -- ok p指向(a-1) a+b a-1 -- ok p指向(a-1) ******************************************************/ EXPORT_C pjres WINAPI script_calculate2(pstack* p, char* err = 0); /**************************************************** *Function: 计算脚本堆栈,需要返回结果 -- 支持单段/多段 *Intput: p 堆栈句柄指针,执行一次后会自动指向下一段堆栈 r 结果返回接收区 err 错误消息接收区 *Output: NULL *Return: 成功返回0,失败返回错误码 *PS:与script_calculate2功能一致,区别是pjres句柄当成参数传入 不需要释放,一般用于函数内部调用 ******************************************************/ EXPORT_C int WINAPI script_calculate3(pstack* p, pjres r, char* err = 0); #endif //防止重复包含