作为C语言中Lua库的一部分,有一个用于加载Lua块的函数lua_load
。该函数的第二个参数是lua_Reader
,它是“用户提供的用于读取块的reader
函数”。 lua_Reader
定义如下:
typedef const char* (*lua_Reader)(lua_State* L, void* data, size_t* size);
我的问题是如何编写这样一个可以提供给lua_load
的函数。我无法在网上找到任何有用的例子。
一些链接提供信息,但还不足以帮助我编写这样的功能:
http://pgl.yoyo.org/luai/i/lua_load
http://pgl.yoyo.org/luai/i/lua_Reader
更具体地说,我不理解函数lua_load
的数据参数。它被列为void*
,虽然我会假设有人会通过const char*
或char*
。但是,我不明白它的来源。是从Lua堆栈中取出来的吗?
看看lua_Reader
本身的文档,而不是lua_load
。它详细解释了该功能的要求:
lua_load
使用的阅读器功能。每当它需要另一块时,lua_load
会调用读者,传递其数据参数。读者必须使用新块的块返回指向内存块的指针,并将大小设置为块大小。块必须存在,直到再次调用reader函数。要发出块的结束信号,读取器必须返回NULL
或将size设置为零。读取器功能可以返回任何大于零的大小的片段。