きっかけは以下の内容を参考に自分でもちょっと似たようなことをやろうとしたときである
qiita.com
具体的には以下のようなdoubleを返す関数GetDataを定義したのだが、その戻り値をpythonで表示させるとなぜか変な値になる、、、
Cpp_to_python.cpp
double GetData(int a, int b) { return (a + b)/13; }
失敗
test.py
lib = windll.LoadLibrary("Cpp_to_python.dll") GetData=dll.GetData print(dll.GetData(10, 50)) #
結論を言うと以下のように書くとうまくいく。ちゃんと戻り値の型を指定してあげる。引数もdoubleの場合は、c_doubleとしてあげる。
test.py
lib = windll.LoadLibrary("Cpp_to_python.dll") GetData=dll.GetData GetData.argtypes=[c_int,c_int] GetData.restype = c_double print(dll.GetData(10, 50)) #
元々の例ではうまくいったのはintがデフォルトなのかなと思ったが、確かに以下のドキュメントにそう書いてある。
docs.python.org
以上、まったく大した内容ではなかった