美文网首页
C API-加载文件

C API-加载文件

作者: 烫烫烫烫烫烫烫烫烫烫烫烫 | 来源:发表于2019-05-06 15:33 被阅读0次

    文件加载

    c加载lua文件需要用到两个函数宏

        luaL_loadfile(lua_State* L, const char* filename)  //加载文件
        lua_pcall(lua_State *L, int nargs, int nresults, int errfunc) //执行文件
    

    代码示例:
    load_test.lua

    width=200
    height=300
    

    main.cc

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #ifdef __cplusplus
    extern "C" {
    #include "lua.h"
    #include "lauxlib.h"
    }
    
    #endif // __cplusplus
    
    void error(lua_State *L, const char* fmt, ...) {
        va_list argp;
        va_start(argp, fmt);
        vfprintf(stderr, fmt, argp);
        va_end(argp);
        lua_close(L);
        exit(EXIT_FAILURE);
    }
    
    void load(lua_State* L, const char* fname, int *w, int *h) {
        if (luaL_loadfile(L, fname) || lua_pcall(L, 0, 0, 0)) {
            //luaL_loadfile\lua_pcall 发生错误,两个函数都会把错误消息压入栈,并返回一个非零的错误代码,可以通过lua_tostring获得错误信息
            error(L, "error cannot run config  file:%s\n", lua_tostring(L, -1));
        }
    
        lua_getglobal(L, "width"); //将lua脚本中的全局变量 width 入栈
        lua_getglobal(L, "height"); 
    
        if (!lua_isnumber(L, -2)) {
            error(L, "error width should be a number\n");
        }
        if (!lua_isnumber(L, -1)) {
            error(L, "error height should be a number\n");
        }
    
        *w = lua_tointeger(L, -2);
        *h = lua_tointeger(L, -1);
    
    }
    
    
    int main() {
    
        lua_State* L = luaL_newstate();
        int weight = 0;
        int height = 0;
        load(L, "./load_test.lua", &weight, &height);
        printf("weight = %d, height = %d\n", weight, height);
        lua_close(L);
        system("pause");
    }
    

    相关文章

      网友评论

          本文标题:C API-加载文件

          本文链接:https://www.haomeiwen.com/subject/xgxdoqtx.html