我使用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-wrapper中生成的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);
}
,但我不确定我是以正确的方式做到了......
答案 0 :(得分:1)
有两种更简单的方法可以做到这一点:
typedef
,可能使用%include
告诉SWIG使用unsigned char *
使用普通%apply
类型地图:
%apply unsigned char * { const Char * }