将外部指针包装到 SWIG 数据结构中

Posted

技术标签:

【中文标题】将外部指针包装到 SWIG 数据结构中【英文标题】:Wrapping a foreign pointer into a SWIG data structure 【发布时间】:2014-09-21 00:35:32 【问题描述】:

我将 Lua 与两个 C 库一起使用,其中一个使用 SWIG,另一个使用手动包装。

手动包装的库是 Freetype 的接口;它在 C 中创建 FT_Face 指针,并将其作为 lightuserdata 返回。

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

有没有办法把 Lua 用户数据变成swig_lua_userdata?如何让 SWIG 将我的 FT_Face 用户数据“识别”为函数的有效参数?

【问题讨论】:

【参考方案1】:

答案似乎是“类型映射”:

%typemap(in) FT_Face 
   $1 = (FT_Face)lua_touserdata(L,$input);

%typemap(typecheck) FT_Face = void*;

【讨论】:

以上是关于将外部指针包装到 SWIG 数据结构中的主要内容,如果未能解决你的问题,请参考以下文章