Luajit和Torch7:从Torch7 C api访问cdata类型的对象

时间:2015-05-26 19:52:20

标签: c++ c lua luajit

有没有办法将 cdata 转换为 userdata ?如何使用C api向堆栈中推送/检索 cdata

编辑:原始标题提到了luajit而不是Torch。在这种情况下,除了我最终自己提交的那个答案(例如沃尔夫冈' s)之外的其他答案完全合情合理。

3 个答案:

答案 0 :(得分:3)

Lua C API没有扩展来访问由LuaJIT的FFI库创建的cdata对象。

因此,如果您正在处理cdata,那么简单且推荐的方法是从Lua端进行编组。因此,从Lua调用C函数并将cdata作为参数传递。

答案 1 :(得分:1)

也许您会在此处找到有用的信息:http://luajit.org/ext_ffi_semantics.html,更具体地说:http://luajit.org/ext_ffi_semantics.html#convert_fromlua

答案 2 :(得分:1)

我试图访问的cdata是来自torch7的张量对象的数据,我终于通过使用torch7 C API找到了一种方法,我会在这里发布它以防有人发现它有用:

#include <TH/TH.HW>
#include <TH/THStorage.h>
#include <TH/THTensor.h>

然后得到一个称为&#34; an_image&#34;在火炬代码中:

lua_getglobal(L,"an_image");//assuming it goes on top of the stack
THDoubleTensor*data=(THDoubleTensor*)luaT_toudata(L,-1,"torch.DoubleTensor");

最后给出了双打的缓冲区,

memcpy(dest,data->storage->data,n*sizeof(double));