2012-01-28 33 views
0

下の無属性私はSWIG(C +のpython)との奇妙な問題を抱えているSWIG、PY + C:Cでのポインタ

は、私がelements_tを構造体へのポインタを返す関数を持っています。私は

typedef struct elements elements_t; 
struct elements { 
    int nelements; 
    // ... other stuff 
}; 

elements_t* get_elements() 
{ 
    elements_t* p; 
    // ... 
    return p; 
} 

とPythonで..私は結果(ポインタ)を取得するには、Pythonでfunctonを呼び出すが、私は、構造体の要素にアクセスすることはできません。

r = clibrary.get_elements() 
print r 
# <Swig Object of type 'elements_t *' at 0xb77029f8> 
print r.nelements 
# AttributeError: 'SwigPyObject' object has no attribute 'nelements' 

は、だから私は最後を取得します

:エラーは、適切な構造に pポイントは...
+0

はい、質問に誤りがあります。コードはまだ動作しません:( –

+0

、これは構造体へのポインタであるので、構造体を返すことは可能ですか?私はセクション "31.3.6 Structures" http://www.swigを見ています.org/Doc1.3/Python.htmlなどがありますが、いくつかの例があります –

答えて

3

は、PythonのドキュメントのためのSWIGの pointersセクションによるとにもかかわらず、何ら nelementsがないこと

あなたができない唯一のことは、Pythonからポインタを逆参照することです。

そのメンバーにアクセスするには、そのポインタを逆参照する必要があります。構造体メンバを操作するには、Cでアクセサー/ミューテータ関数を記述する必要があります。

+1

避けることができれば、ポインタの代わりに構造体のインスタンスだけを返します。 –

+0

これは避けたいものです。 ! –

0

ポインタで作業できるようにするアクセサ関数を書くことはできますが、これはかなり難しいことです。

関連する問題