Swig和Lua:如何将Lua文件映射到FILE*

mar*_*cin 2 lua swig

我有一个C函数FILE*作为参数,我想在Lua中使用这个函数,传递Lua文件.我想我需要%typemap这个.怎么写呢?(我刚开始学习Lua).

mar*_*cin 5

这是我最终提出的解决方案.

在Lua源代码中,在liolib.c中,有一个函数FILE *tofile (lua_State *L),它将Lua文件转换为C FILE*,但它不是API的一部分.我修改了一下来制作一个类型图:

%typemap(in) FILE * {
    FILE **f;
    if (lua_isnil(L, $input))
        $1=NULL;
    else {
        f = (FILE **)luaL_checkudata(L, $input, "FILE*");
        if (*f == NULL)
            luaL_error(L, "attempt to use a closed file");
        $1=*f;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个typemap也接受nil,因为我需要一种方法将NULL传递给C函数.