2011-12-28 45 views
1

我使用SWIG生成C++ < - > Lua包裝工作項目。 我的主要問題是,在這個基地項目中,每個平臺都有類型定義。例如。對於Win32,存在標題Win32Types.h,其中諸如SWIG生成的Lua <--> C++包裝處理不當的原始類型typedef更名

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; 
} 

的示例類中,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); 
} 

,但林不知道我這樣做是正確的方式...

回答

1

有兩家更簡單的方法,你可以這樣做:

  1. 顯示SWIG的typedef■對於平臺,可能使用%include
  2. 泰爾痛飲ŧ Ø只使用正常unsigned char *類型映射使用%apply:使用%

    %apply unsigned char * { const Char * } 
    
+0

所適用的罰款! – 2011-12-29 09:40:05