SWIG 生成的 Lua<-->C++包装器错误处理由 typedef 重命名的基本类型
我使用 SWIG 生成 C++ <-->工作项目的 Lua 包装器。 我的主要问题是,在这个项目的基础上,每个平台都存在类型定义。例如,对于 Win32,存在一个标头 Win32Types.h,其中
typedef char Char;
typedef char TChar;
typedef signed int Int;
typedef unsigned int UInt;
typedef signed char Int8;
typedef unsigned char UInt8;
...
定义了类似的内容。 现在的问题是,对于像这样的示例类
class Named
{
public:
Named();
virtual ~Named();
void setName(const Char *name);
const Char* GetName() const;
}
,SWIG 包装器中生成的 setName
- 方法看起来像这样:
static int _wrap_Named_SetName(lua_State* L) {
int SWIG_arg = 0;
Named *arg1 = (Named *) 0 ;
Char *arg2 = (Char *) 0 ;
SWIG_check_num_args("Named::SetName",2,2)
if(!SWIG_isptrtype(L,1))
SWIG_fail_arg("Named::SetName",1,"Named *");
if(!SWIG_isptrtype(L,2))
SWIG_fail_arg("Named::SetName",2,"Char const *");
if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Named,0))){
SWIG_fail_ptr("Named_SetName",1,SWIGTYPE_p_Named);
}
if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_Char,0))){
SWIG_fail_ptr("Named_SetName",2,SWIGTYPE_p_Char);
}
...
}
这里的问题是,包装器尝试将 Char 视为另一个类指针,虽然它只是一个重命名为 Char 的 char 指针。 有什么办法可以避免这种行为吗?
我尝试编写类似的类型映射
%typemap(in) Char {
$1 = lua_tostring($input);
}
,但我不确定我是否以正确的方式完成了...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有两种更简单的方法可以做到这一点:
typedef
,可能使用%include
告诉 SWIG 仅使用普通的
unsigned使用
类型映射:%apply
的 char *There's two easier ways you can do this:
typedef
s for that platform, probably using%include
Tell SWIG to just use the normal
unsigned char *
typemap using%apply
: