更新:添加doString方法及对应的单元测试

This commit is contained in:
2026-04-05 08:19:20 +08:00
parent 14526b8dc2
commit 8f1d409cf5
10 changed files with 337 additions and 146 deletions

View File

@ -85,6 +85,28 @@ int run(void *selfd,const char *path,const char *arg)
snprintf(self->result,MAX_RESULT,"%s",runner->reslt.c_str());
return 0;
}
/// @brief 执行单句lua语句
/// @param selfd init_lua_runner返回的void指针
/// @param target 执行语句(字符串类型)
/// @return 成功返回0,失败返回-1,并将lua出错原因拷贝至result中
int dostring(void *selfd,const char *target){
lua_runner* self = (lua_runner*)selfd;
//重定向输入到回调函数
Lua_runner *runner = (Lua_runner*)self->lua_obj;//还原对象
if(runner == NULL)
{
errno = NAPI_LUA_STATE_ERROR;
return -1;
}
if(runner->dostring(target)==-1){
snprintf(self->result,MAX_RESULT,"%s",runner->reslt.c_str());
return -1;
}
snprintf(self->result,MAX_RESULT,"%s",runner->reslt.c_str());
return 0;
}
/// @brief 清理lua状态机缓存虚拟栈加载的包等
/// @param self 使用init_lua_runner初始化的lua_runner结构体指针
/// @return 0代表正常结束-1表示异常退出

View File

@ -62,6 +62,12 @@ int unload_lib(void *selfd,const char *name);
/// @return 成功返回0,失败返回-1,并将lua出错原因拷贝至result中
int run(void *selfd,const char *path,const char *arg);
/// @brief 执行单句lua语句
/// @param selfd init_lua_runner返回的void指针
/// @param target 执行语句(字符串类型)
/// @return 成功返回0,失败返回-1,并将lua出错原因拷贝至result中
int dostring(void *selfd,const char *target);
/// @brief 清理lua状态机缓存不销毁状态机
/// @param selfd init_lua_runner返回的void指针
/// @return 成功返回0,失败返回-1

View File

@ -209,6 +209,37 @@ int Lua_runner::run(const char *path,const char *arg)
return -1;
}
}
int Lua_runner::dostring(const char *target)
{
if(target == NULL)
{
errno = NAPI_ERROR_FUNCS;
return -1;
}
if(luaL_dostring(this->L,target) != LUA_OK)
{
errno = NAPI_ERROR_FUNCS;
this->reslt = lua_tostring(this->L,-1);
lua_pop(L,1);//错误出栈
return -1;
}
if(lua_gettop(this->L) == 0) {
errno = NAPI_SCRIPT_BAD_RET;
this->reslt = "";
return -1;
}
if(lua_isstring(this->L,-1)){
this->reslt = lua_tostring(this->L,-1);
lua_pop(L,1);
return 0;
}
else{
errno = NAPI_SCRIPT_BAD_RET;
lua_pop(L,1);
return -1;
}
}
//TODO 实现函数调用 achieve func call via file
/*
int Lua_runner::callfunction()

View File

@ -25,7 +25,8 @@ class Lua_runner//lua运行器对象
int unload_lib(const char *name);//解除加载
int run(const char *path = NULL,const char *arg = NULL);
int clean();//清除状态机缓存
int callfunction();
//int callfunction();
int dostring(const char *target);
std::string reslt;
lua_State *get_lua_State();
private: