【发布时间】:2013-08-07 16:53:29
【问题描述】:
我的 swig .i 文件中有两个结构(实际上来自第三方库),它们遵循这种形式:
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)。使用 %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用于构造函数,但这不是重点。