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