ctypesの共有ライブラリからグローバル変数のマッピング

StackOverflow https://stackoverflow.com/questions/544173

  •  23-08-2019
  •  | 
  •  

質問

私はctypesのを使用して、ライブラリpbs_errnoでグローバルとして宣言int型の値libtorque.soをマッピングしたいと思います。

現在、私はそうのようなライブラリをロードすることができます:

from ctypes import *
libtorque = CDLL("libtorque.so")

と、正常な機能の束をマッピングしました。私もそれにアクセスする必要があるのでしかし、エラーチェックの目的のためにそれらの多くはpbs_errno変数を設定します。しかし、私はそれにアクセスしようとする場合、私は取得ます:

>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>

もちろん、それは関数ポインタではありません、それはワンセグ障害になり呼び出そうとします。

これは、APIヘッダファイル内のメインヘッダーとint pbs_errno;extern int pbs_errno;として宣言されます。

はobjdumpのように記号を示し

00000000001294f8 g    DO .bss   0000000000000004  Base        pbs_errno
役に立ちましたか?

解決

のDLLでエクスポート値へのアクセスについてのctypesのドキュメント内のセクションがあります

http://docs.python.org/ライブラリ/ ctypes.html#のアクセス-値はエクスポート-から-のdllする

例えばます。

def pbs_errno():
    return c_int.in_dll(libtorque, "pbs_errno")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top