3

Python から DLL で定義されている関数を使用したいと考えています。C++ 関数 (get_version) から返される値は構造体です。

typedef struct myStruct {
    size_t size;
    char * buff;
} myStruct ;

Python コードは次のとおりです。

lib = CDLL(myDLL.dll)
lib.get_version

問題は、返された値をどのように処理するかです。

Voo's answer を読み、他の投稿を読みましたが、まだこれに苦労しています

私は構造体クラス(Foo、Vooの答えから)を宣言し、restype コードを設定しました

class Foo(Structure):
    _fields_ = [('size', c_size_t), ('buff', c_char_p)]

lib = CDLL(myDLL.dll)
lib.get_version
lib.get_version.restype = Foo._fields_

次のエラー TypeError: restype must be a type, a callable, or None が表示されます

私はこれについて読んで、restypenotをリストとして設定すると、たとえばc_char_p、エラーは表示されません

私が設定したときrestype

lib.restype = Foo. 田畑

エラーは表示されませんが、restypeforget_versionが正しく設定されていません デバッグで変数を見ると、次のようになります。

lib.restype = list: [('size', ), ('buff', )]

lib.get_version.restype = PyCSimpleType:

どんな助けでもいただければ幸いです

4

1 に答える 1

2

ctypesモジュールを使用する必要があります。Pythonコードでctypesを使用して構造体を定義するだけです。

何かのようなもの:

>>> from ctypes import *
>>> class Foo(Structure):
...     _fields_ = [("size", c_size_t), ("buff", c_char_p)]

トリックを行う必要があります。次にrestypeget_versionメソッドの を構造体に設定して、インタープリターが何を返すかを認識し、期待どおりに使用できるようにします。

于 2012-06-24T21:31:51.723 に答える