1
私はctypes経由でPythonにCライブラリをラッピングしています。現時点では、私は1つのパラメータで1つ以上の行にこだわっていました。ここでは、Cコード:python ctypes - ラップ無効ポインタ
void* gVimbaHandleFake = (void*)1;
err = VmbFeatureBoolGet(gVimbaHandleFake, "GeVTLIsPresent", &isGigE);
この奇妙な空ポインタです。一般的に私はvoidポインタが何であるか知っていますが、これは "特別な"ものと思われます。 (void*)1
の1を変更した場合、プログラムはもう動作しません(ネットワークカメラを見つけることです)。それはクラッシュすることはありませんが、カメラをもう見つけません。
gVimbaHandle = cast(1, c_void_p)
err = self.dll.VmbFeatureBoolGet(byref(gVimbaHandle), "GeVTLIsPresent", byref(isGigE))
:
gVimbaHandle = c_void_p(1)
私のプログラムイマイチクラッシュが、それはハンドルがあることを私に伝えます無効です... gVimbaHandle.value
でポインタを調べると、出力として1L
が得られます。これは問題である可能性があります、長いデータ型のL
?
誰かがこれを修正する方法を知っているのですか、Cの "特別な" (void*)1
ポインタを私に説明できますか?
ありがとうございました!
@eryksun
おかげであなたが参照することにより、ポインタを渡しているが、例えばCコードは、値で渡します。 'gVimbaHandle = c_void_p(1)'と 'VmbFeatureBoolGet(gVimbaHandle、" GeVTLIsPresent "、byref(isGigE))'を使用してください。 – eryksun
ああ、そうです、PythonとCのポインタの組み合わせのものと混乱していましたが、これを見ていませんでした...どうもありがとう。私のためにそれを修正した。あなたが答えとして投稿したら、それを解決策としてマークします。再度、感謝します –