将一个外部指针包装成SWIG数据结构。

我正在使用Lua和两个C库,其中一个使用SWIG,另一个是手动封装的。

手动封装的库是Freetype的接口;它在C中创建FT_Face指针,并将其作为轻量级用户数据返回。

现在我需要将这个FT_Face作为参数传递给一个由SWIG封装的函数之一。但是,SWIG当然不会使用普通的userdata作为参数,而是希望每个C指针都是由SWIG创建的——即使我有一个FT_Face指针,SWIG也希望看到一个SWIGTYPE_p_FT_Face,这是底层的swig_lua_userdata

有没有办法将Lua的userdata转换为swig_lua_userdata?我如何让SWIG将我的FT_Face userdata识别为函数的有效参数?

点赞
用户2114548
用户2114548

答案似乎是“typemaps”:

%typemap(in) FT_Face {
   $1 = (FT_Face)lua_touserdata(L,$input);
}
%typemap(typecheck) FT_Face = void*;
2014-09-21 13:40:44