Pythonからdllに呼び出しをしようとしていますが、アクセス違反が発生しています。次のコードでctypesを正しく使用する方法を教えてください。想定しているのgetItemsは、他のフィールドを必要としない、私はIDを得ることに本当に唯一興味がこのPythonでDLLから関数を呼び出す
struct ITEM
{
unsigned short id;
unsigned char i;
unsigned int c;
unsigned int f;
unsigned int p;
unsigned short e;
};
のように見える構造体を返します。私のコードは以下の通りですが、何が間違っていますか?助けてくれてありがとう。
import psutil
from ctypes import *
def _get_pid():
pid = -1
for p in psutil.process_iter():
if p.name == 'myApp.exe':
return p.pid
return pid
class MyDLL(object):
def __init__(self):
self._dll = cdll.LoadLibrary('MYDLL.dll')
self.instance = self._dll.CreateInstance(_get_pid())
@property
def access(self):
return self._dll.Access(self.instance)
def get_inventory_item(self, index):
return self._dll.GetItem(self.instance, index)
if __name__ == '__main__':
myDLL = MyDLL()
myDll.get_item(5)
これを追加して今すぐ取得しました AttributeError: 'instancemethod'オブジェクトに 'restype'属性がありません – poco
カスタムクラスではなく、実際のDLL関数で 'restype'を設定する必要があります。あなたの場合: 'self._dll.get_item_restype = ITEM'をクラスのメソッドに入れてください。混乱させて申し訳ありません。 –