1

私のswig .iファイルには、次の形式に従う2つの構造体(実際にはサードパーティのライブラリから)があります。

typedef struct MY_STRUCT {
  void*       pParameter;
  unsigned long pLen;
} MY_STRUCT;
%extend MY_STRUCT
{
    MY_STRUCT()
    {
        MY_STRUCT *m= new MY_STRUCT();
        m->pParameter = NULL;
        m->pLen = 0;
        return m;
    }
}

typedef struct ANOTHER_STRUCT {
    char * another;
    unsigned long len;
} ANOTHER_STRUCT;
%extend ANOTHER_STRUCT
{
    ANOTHER_STRUCT()
    {
        ANOTHER_STRUCT *p= new ANOTHER_STRUCT();
        p->another = NULL;
        p->len = 0;
        return p;
    }
    unsigned long __len__()
    {
        return sizeof(ANOTHER_STRUCT);
    }
}

MY_STRUCT の pParameter は void * です。これは、char * または構造体 (ANOTHER_STRUCT など) へのポインターである可能性があるためです。char * マッピングだけを処理するのは を使用して簡単です%typemap(in) void* = char*;が、構造体を使用しようとすると失敗します。Pythonで見たいものは次のとおりです。

s = MY_STRUCT()
another = ANOTHER_STRUCT()
s.pParameter = another # this should pass the struct pointer
s.pParameter = "some string" # or a char pointer if this is provided

これは可能ですか?そうでない場合、ポインター値を割り当てるためにいくつかのヘルパー関数を宣言する必要がありますか?

4

1 に答える 1