私はswigでラップされたCファイルを持っています。このCファイルには、関数ポインタを引数として持つAPIが含まれています(下記参照)。 Iがポインタ引数の機能をマップすることができPythonのctypesとswigの相互運用性
int binary_op (int a, int b, int (*op)(int,int))
{
return (*op)(a,b);
}
はexample.cは、マッピング関数はSWIGを使用して、同じファイル内に定義されていることを条件とします。しかし、マッピング関数はCtypesでラップされた別のCファイルで定義されています。 Pythonで
testing.c
int add_int(int a, int b){
return a+b;
}
、私はSWIGモジュールを生成し、ctypesのでAPIを呼び出し、インポートマッピング機能を生成し、それがエラーを生じました。
testfile.py
import example # Module generated by swig
from ctypes import *
wrap_dll = CDLL('testing.dll') # testing.dll is generated with File_2.c
# Mapping function 'add_int' to argument in 'binary_op'
example.binary_op(3,4,wrap_dll.add_int)
に示すエラーは、引数の型が一致していないです。
TypeError: in method 'binary_op', argument 3 of type 'int (*)(int,int)'
私たちはエラーがあります。コードはありませんし、疑問がありません。 3つのうちの1つが[mcve]のために、より良くしようとしてください。 – Anthon
ここでコールバック、SWIG、Pythonを検索すると、使用できるものが見つかります。それはそこにあります –
@ JensMunk:私は静かに多く探しましたが、何も関係していないようです。あなたが私を関連するものに導くことができれば、どんな助けも認められるでしょう。ありがとう –