2017-03-22 1 views
0

私はctypesライブラリを使用してPythonからdllにアクセスしています。 dllの関数は、名前ではなく序数でアクセスできます。私はDependency Walkerを使ってdllを調べ、関数名に序数を関連付けることができます。私がアクセスしたいdllにはグローバルエラー番号変数があります。依存関係ウォーカーは、それが序数の値が13であることを示しています。Pythonでctypesを使用している序数で記述されていないdllのグローバル変数の値を取得するにはどうすればよいですか?

ctypesを使用して序数でグローバル変数にアクセスする方法はないようです。のよう

ERROR_VALUE = c_int.in_dll(my_dll_handle、 "my_error_value") (https://docs.python.org/3/library/ctypes.html#accessing-values-exported-from-dlls

任意のアイデア:グローバル変数が命名した場合

は、私のような何かを行うことができるだろうと思われますどのように私は序数だけ与えられたグローバル変数にアクセスするのですか?

+0

あなたがリンクしたページにはこれを議論するセクションがあります。私は序文を探しました。それが動作するかどうかを確認します。 – FamousJameous

+0

リンクされたページに、変数ではなく関数用の序数を使用する方法が示されています –

答えて

1

の関数が序数でアクセスされている以外は、ドキュメントに明示的なものはありませんでした。実験を通して、働い以下:

テストコード:序数でエクスポート

int x = 5; 
int func(int a) { return a*2; } 

.defファイル:

EXPORTS 
    x @1 NONAME DATA 
    func @2 NONAME 

Pythonコード:私はこれを使ったことがない

>>> from ctypes import * 
>>> test = CDLL('test') 
>>> test[2](5)   # Call ordinal 2 function. 
10 
>>> test[1]    # Ordinal 1 thinks it is a function pointer. 
<_FuncPtr object at 0x0000000002FEA048> 
>>> cast(test[1],POINTER(c_int)).contents  # cast? 
c_long(5)          # Worked! 
>>> cast(test[1],POINTER(c_int)).contents.value 
5 
+0

ありがとう - これは機能します! –

関連する問題