8

私はdoxygenが次のように見えるC関数を持っています:

long function( classA * obj1,
               classB * obj2,
               classC ** obj3,
               long value,
               const char * name1,
               const char * name2,
               classD ** obj4,
               classD ** obj5,
               classD ** obj6 
               )    

Python から呼び出して、最後の 3 つの引数を取得して別の dll に渡す必要があります。現在、DLL を正常に呼び出すことができますが、最後の 3 つの引数を他の関数に渡そうとすると、次のようなエラーが発生します。

WindowsError: exception: access violation writing 0x0000000000000000

私はおそらく ctypes 側で何か間違ったことをしているのでしょう。

2 番目の DLL は次のようになります。

int function2(ClassD *  obj4)   

そして現在、最後の 3 つの引数を次のように「組み立て」ます。

  temp=ctypes.c_long*1
  obj = temp(0)

また、ctypes から swig に移行する方法はありますか? どうやら、長い関数を使用して逆の方法で行うことができます。

4

1 に答える 1

9

Cタイプがどのように機能するかを理解するために、さらに掘り下げる必要があり、次のように機能するようです。関数の場合、配列を作成する必要がありました:

arg = (ctypes.POINTER(ctypes.c_double) * 1)()

関数への参照によって渡します。

ctypes.byref(arg)

2 番目の関数では、作成した配列の 1 つの要素を渡すだけです。

arg[0]
于 2012-12-11T13:30:41.303 に答える