2011-06-20 6 views
2

私は現在Python-C SWIGインターフェイスを設定しています。私はすでにそれは、以下のコマンドを介して共有オブジェクトファイルを生成するために得ている:typedefされた変数のポインタをSWIGに実装する方法は?引数 'BYTE const *'の引数2のエラー

myFile.i

-pythonがぶ飲み

のgcc -c myFile.c myFile2.c myFile3.c myFile_wrap.c -IC:\ myincludedirectoryの\は

のgcc -shared myFile.o myFile2.o myFile3.o myFile_wrap.o -Ic含ま:myFile.iで\ myincludedirectory \ libsに-lpython27 -o _myfile3.o

を、私が持っている:

/* myFile3 */ 
%module myFile3 

%{ 
    #include "myFile.h" 
    #include "defs.h" 
    #include "myFile2.h" 
    #include "myFile3.h" 

%} 
    %include "defs.h" 
    %include "myFile.h" 
    %include "myFile2.h" 
    %include "myFile3.h" 

defs.hは、(特に)次の行が含まれています。私は私のプログラムを呼び出すようにしようとすると

typedef unsigned int BOOL; 
typedef unsigned short WORD; //Word is 2 bytes but int* is 4 bytes ?? 
typedef unsigned int DWORD; 
typedef unsigned long long QWORD; 
typedef unsigned char BYTE;  

、私は、コマンドプロンプトで次の操作を行います。

パイソン

輸入myFile3

myFile3.myFuncInit()

myFile3.myFuncWrite( "ABCD"、 "ABCDEFGHI"、8); // < = この行を入力するとエラーが発生します。 myFuncWriteのパラメータは、(CHAR * PARAM1、CONST BYTEの*のPARAM2、WORDのparam3)

ある

私は、問題はそれがconstのBYTEポインタだという事実にあると考えています。私はいくつかの簡単なヘルパー関数またはtypemapを正しく渡すためにそれを行う必要があるかどうかはわかりません。さて、私はここで立ち往生し続けています。私は、私がBYTEのtypedefのポインタを単に渡していることを理解するために何をすべきか分かりません。 %の後

答えて

3

は、この行を追加してみてください、「defs.h行を含める:

%apply char* {BYTE*}; 

これは* BYTEに(型チェックを含む)のchar *タイプマップのすべてを適用します。この方法の詳細については、。 SWIGマニュアルの以下のセクションをお読みください。

http://www.swig.org/Doc2.0/Typemaps.html#Typemaps_nn6

関連する問題