将外部指针包装到 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-php 包装器使用指针,c 代码是一个数组

带有指针的C结构,如何Swig?

SWIG Python - 包装一个需要指向结构的双指针的函数

SWIG C++ Python:通过引用或指针包装 int

SWIG:如何将 C++ 对象数组从 C# 传递到 C++?

用 SWIG array_class 包装字节数组数据