zoukankan      html  css  js  c++  java
  • lua 调用C函数

    #include "tolua_fix.h"
    #include "WordFilter.h"
    #include "LuaBasicConversions.h"
    #include "lua_sensitive_binding.h"
    
    int lua_sensitive_loadfile(lua_State* tolua_S)
    {
        size_t sz = 0;
        const char *filePath = luaL_checklstring(tolua_S, 1, &sz);
        std::thread  threadLoadFile(&CWordFilter::loadFileByThread, CWordFilter::getInstance(), filePath);
        threadLoadFile.detach();
        return 1;
    }
    
    int censorStr(lua_State *tolua_S)
    {
        size_t sz = 0;
        std::string source = luaL_checklstring(tolua_S, 1, &sz);
        if (CWordFilter::getInstance()->censorStr(source))
        {
            return 0;
        }
        else if (CWordFilter::getInstance()->censorStrWithOutSymbol(source))
        {
            return 0;
        }
        return 1;
    }
    
    static luaL_Reg lua_sensitive_funcs[] = {
        { "loadFile", lua_sensitive_loadfile },
        { "censorStr", censorStr },
        { NULL, NULL }
    };
    
    
    
    int init_sensitive_binding(lua_State* tolua_S){
        lua_newtable(tolua_S);
        lua_pushvalue(tolua_S, -1);
        lua_setfield(tolua_S, LUA_GLOBALSINDEX, "SensitiveChecker");
    
        luaL_Reg* lib = lua_sensitive_funcs;
        for (; lib->func; lib++)
        {
            lua_pushcfunction(tolua_S, lib->func);
            lua_setfield(tolua_S, -2, lib->name);
        }
        lua_pop(tolua_S, 1);
    
        return 1;
    }
    
    int register_sensitive_binding(lua_State* tolua_S)
    {
        return init_sensitive_binding(tolua_S);
    }

    将需要用的函数插入到 名字为 SensitiveChecker 的全局变量表中, 这里我加入了两个函数。用于之前的敏感词屏蔽操作,因为只需要用到这两个接口,所以没有必要去把一个类添加到项目中去,为了省事就加了个全局的表

  • 相关阅读:
    BlockingQueue 原理 分析
    java引用 强引用,软引用,弱引用
    actomic cas无锁操作。
    MongoDB库设计原则及实践
    spring事物传播机制 事物隔离级别
    Hive UDAF介绍与开发
    [技术学习]js接口继承
    [技术学习]js继承
    [技术学习]正则表达式分析
    [技术学习]js正则表达式汇总
  • 原文地址:https://www.cnblogs.com/kpxy/p/11266666.html
Copyright © 2011-2022 走看看