将外部指针包装到 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 数据结构中的主要内容,如果未能解决你的问题,请参考以下文章
SWIG Python - 包装一个需要指向结构的双指针的函数