2011-12-28 1 views
1

SWIGを使用して、作業プロジェクトのC++ < - > Luaラッパーを生成しました。 私の主な問題は、ベースのこのプロジェクトでは、各プラットフォームの型定義が存在することです。例えば。 Win32の場合、Win32Types.hというヘッダがあります。SWIGで生成されたLua <--> C++ Wrapperの誤った取り扱いの原始型がtypedefで名前が変更されました

typedef char Char; 
typedef char TChar; 
typedef signed int Int; 
typedef unsigned int UInt; 
typedef signed char Int8; 
typedef unsigned char UInt8; 
... 

が定義されています。ここ

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

    ... 
} 

問題は、ラッパーがしようとします: - 問題が

class Named 
{ 
    public: 
    Named(); 
    virtual ~Named(); 

    void setName(const Char *name); 
    const Char* GetName() const; 
} 

のような例のクラスで、今、setName SWIGラッパーで生成されたメソッドは次のようになりますCharを別のクラスポインタとして扱いますが、Charポインタの名前はCharに変更されています。 この動作を回避する方法はありますか?

あなたがこれを行うことができる2つの簡単な方法があります...

答えて

1

を私は

%typemap(in) Char { 
    $1 = lua_tostring($input); 
} 

のようなタイプマップを書き込もうとしましたが、私はそれを正しい方法でやったイムはわからない:

    は、
  1. SWIGにそのプラットフォーム用のtypedefが表示されている可能性があります。%include
  2. Tell SWIG t Oだけ%applyを使用してTYPEMAP通常unsigned char *を使用します。

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

%を使用して加工した罰金を適用します! –

関連する問題