2017-05-08 9 views
1

私はctypes経由でPythonにCライブラリをラッピングしています。現時点では、私は1つのパラメータで1つ以上の行にこだわっていました。ここでは、Cコード:python ctypes - ラップ無効ポインタ

void* gVimbaHandleFake = (void*)1; 
err = VmbFeatureBoolGet(gVimbaHandleFake, "GeVTLIsPresent", &isGigE); 

この奇妙な空ポインタです。一般的に私はvoidポインタが何であるか知っていますが、これは "特別な"ものと思われます。 (void*)1の1を変更した場合、プログラムはもう動作しません(ネットワークカメラを見つけることです)。それはクラッシュすることはありませんが、カメラをもう見つけません。

は、私は多くの異なるもの、Pythonでの最後の試みを試してみました。また、「通常」の方法を試してみました
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ポインタを私に説明できますか?

ありがとうございました!

+0

@eryksun

gVimbaHandle = c_void_p(1) err = self.dll.VmbFeatureBoolGet(gVimbaHandle, "GeVTLIsPresent", byref(isGigE)) 

おかげであなたが参照することにより、ポインタを渡しているが、例えばCコードは、値で渡します。 'gVimbaHandle = c_void_p(1)'と 'VmbFeatureBoolGet(gVimbaHandle、" GeVTLIsPresent "、byref(isGigE))'を使用してください。 – eryksun

+0

ああ、そうです、PythonとCのポインタの組み合わせのものと混乱していましたが、これを見ていませんでした...どうもありがとう。私のためにそれを修正した。あなたが答えとして投稿したら、それを解決策としてマークします。再度、感謝します –

答えて

1

だから、ソリューション/答えは次のとおりです。

関連する問題