我有一个C函数,它需要FILE*
作为参数,我想在Lua中使用这个函数,传递Lua文件。我想我需要一个%typemap
。如何写它? (我刚开始学习Lua)。Swig和Lua:如何映射Lua文件到FILE *
2
A
回答
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;
}
}
此类型映射也接受零,因为我需要一个方式来传递NULL给C函数。
0
您正在使用SWIG为您的C代码生成Lua绑定?为什么不直接使用Lua C API,或者如果您可以使用C++ Luabind?我认为其中的任何一个都不会比试图与SWIG合作更好,除非你已经对SWIG有强烈的依恋。
+0
我使用SWIG生成Python绑定,所以我认为最简单的方法是重复使用相同的.i文件进行Lua绑定。它的工作正常,除了问题中描述的例外。 感谢您指出其他选项。 – marcin 2009-11-21 21:04:56
0
有没有简单的方法来做你想问什么。
Lua File类接口抽象出底层的实现。你不能简单地键入它。但是,您可以创建一个C代理,它包装您需要的FILE操作,并使用SWIG在Lua中创建此代理的实例。然后,您可以生成一个类型映射来将FILE *转换为包装代理实例。
喜欢的东西:
class MyFileProxy {
private:
FILE* fp;
public:
MyFileProxy(FILE* fp);
MyFileProxy(const char* path);
FILE* GetFilePointer();
Seek(...
在痛饮绑定很简单:
%module "MyFile"
%{
#include "MyFileProxy.h"
%}
// Tell SWIG how to use a proxy for functions that take a FILE*
%typemap(in) FILE*
{
void* tmp = 0;
SWIG_ConvertPtr(L,$argnum,(void**)&tmp,$1_descriptor,1);
if (tmp)
{
MyFileProxy* proxy = (MyFileProxy)tmp;
arg$argnum = proxy->GetFilePointer();
}
}
// Tell SWIG how to create a proxy when returning FILE*
%typemap(out) FILE*
{
MyFileProxy* pResult = new MyFileProxy($arg);
SWIG_NewPointerObj(L, pResult, $1_descriptor, 1);
}
%include "MyFileProxy.h
}
您将无法使用IO:但是直接文件。
相关问题
- 1. Lua + SWIG Monkey修补
- 2. Lua/SWIG从Lua内包装userdata
- 3. 如何直接将Lua变量映射到C++变量?
- 4. 如何将display.newImage()映射到lua中的另一个目录 - corona
- 5. 如何从另一个lua文件返回lua文件?
- 6. 在Lua中创建排序映射UDF
- 7. 如何运行.lua文件?
- 8. 如何从另一个lua文件中加载和执行lua文件
- 9. ,从.lua文件
- 10. SWIG如何从Lua中的c结构使用Lua表来操作
- 11. 从Lua到Lua的Lua嵌套表
- 12. nodemcu lua dofile - 如何调用另一个lua文件?
- 13. Lua C api:如何加载定义为模块的lua文件?
- 14. 如何在Lua中创建方法的映射?
- 15. 如何使用Lua中自己的唯一键实现映射?
- 16. 在SWIG上返回一个lua表
- 17. 需要文件Lua
- 18. Lua文件串联
- 19. 通过dll将C#类映射到Lua函数
- 20. Lua C API - 将属性映射到函数
- 21. 如何集成Lua和.Net
- 22. 用SWIG包装一个Lua对象以在C++中使用SWIG
- 23. 如何在Python到Lua
- 24. 如何在Lua
- 25. 如何在php中解析lua文件
- 26. 如何在CygWin中执行.lua文件?
- 27. 如何在Lua中编写文件?
- 28. 如何在* .lua文件上使用premake
- 29. 如何在Lua中解析xml文件?
- 30. 如何用Lua打开wav文件
这是一个很好的发现。感谢分享! – 2009-11-30 14:51:01