2016-08-10 7 views
0

私はPythonで解析できるようにしたい構造体定義のヘッダファイルを持っています。これを行うために、私はスィグに向かった。swigを使用してヘッダファイルを解析する

ヘッダーファイルの名前が "a.h"とすることができます。最初に "a.c"という名前に変更し、空の "a.h"ファイルを同じフォルダに追加しました。

次に、「a_wrap.i」ファイルに次の内容を追加しました。

%module a 
%{ 
    /* the resulting C file should be built as a python extension */ 
    #define SWIG_FILE_WITH_INIT 
    /* Includes the header in the wrapper code */ 
    #include "a.h" 
%} 
/* Parse the header file to generate wrappers */ 
%include "a.h" 
extern struct a_a; 
extern struct a_b; 
extern struct a_c; 

次に、以下のように私はsetup.pyファイルを書いた:

from distutils.core import setup, Extension 

setup(ext_modules=[Extension("_a", 
     sources=["a.c", "a_wrap.i"])]) 

次へ]を、私は私が最終的にパイソン

でそれをインポートしようとした

python setup.py build_ext --inplace 

としてビルドをしました

>>> import a # it works, yaay 
>>> dir(a) 
... 
... 

私はアクセスする方法を望んでいました構造体は "a.c"(もともとはa.h)で定義されています。しかし、私はそれを行う方法を見つけることができないようです。これをどうすれば解決できますか?私は、Pythonからヘッダーファイルで定義されている構造体にアクセスする方法を探しています。

+0

Cファイルに任意のヘッダファイルの名前を変更するには、条約は通常の.cおよび.hファイル名のマッチングにつながることを考えると、危険なようです。たくさんのコードを削除せずにそれを行うことはできますか? – Cody

+0

元のヘッダーだけを含めてください。何か問題がある場合、SWIGはヘッダーを再帰することができないので、宣言は順調でなければなりません。また、輸出キーワードやその他のものは理解されていません。これは、Windowsの場合は '%include" windows.sをインクルードすることで修正できます。 –

答えて

0

グローバル変数a_aa_b and1] cvar` should be accessible from [within your SWIG Python module via A_C:

import a 
print a.cvar.a_a 
print a.cvar.a_b 
# etc. 
関連する問題