我有兩個結構(從第三方LIB其實)在我痛飲.i文件遵循這種形式:痛飲void *的參數
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);
}
}
的pParameter在MY_STRUCT是一個void *,因爲它可以是一個char *或指向結構的指針(如ANOTHER_STRUCT)。只使用%typemap(in) void* = char*;
來處理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
這可能嗎?如果沒有,我是否需要聲明一些幫助函數來分配指針值?
鑑於你使用'new'關鍵字,我有點困惑,你爲什麼需要爲構造函數使用'%extend',但除此之外。 – Flexo