Python3.9でsystemフォルダにあるDLL(API)を参照利用するプログラムを作っています。
DLL関数を呼び出す際に構造体を利用し、その中にデータを設定して渡すのですが
固定長文字列のため、どのように渡せばいいのかわかりません。
ご指導よろしくお願いいたします。
実現したいこと
DLL関数を呼出し、DLLの機能を稼働させたいです。
発生している問題・エラーメッセージ
構造体内部の固定長文字列 [c_wchar_p * 255]に文字を設定しようとすると例外が発生し、以下のエラーとなります。
<class 'TypeError'>:("'getset_descriptor' object is not callable",):'getset_descriptor' object is not callable
該当のソースコード
python3.9
1import ctypes 2class N_Info(ctypes.Structure): 3 _fields_ = [ 4 ('iLineType',ctypes.c_uint32), 5 ('FNumber',ctypes.c_wchar_p * 255 )] 6 : 7 : 8 : 9NUMBER_INFO = N_Info() 10NUMBER_INFO.iLineType = ctypes.c_uint32(1) 11NUMBER_INFO.FNumber= ctypes.c_wchar_p(u'01234567890') # ←例外発生場所 12 13iapi = ctypes.WinDLL(r'Iapi64.dll') 14ret = iapi.IrIndiv(hnd, ctypes.pointer(NUMBER_INFO ) 15 16
試したこと
直接設定しようとしたり、ポインタとして渡そうとしてもエラーが出てしまいます。
補足情報(FW/ツールのバージョンなど)
python3.9
anaconda3
pycharm利用
pythonを利用開始してから半年未満です。
ご指導よろしくお願いいたします。
追記
can110さんのご指摘もあり追記いたします。
DLL仕様書より
1IrIndiv DLLの構造仕様は以下の通りです。 2int WINAPI 3IrIndiv( 4 IN UINT_PTR hnd, 5 IN NUMBER_INFO *NN_Info, 6); 7 8構造体NUMBER_INFO の使用は以下の通りです。 9typedef struct { 10int iLineType; 11char FNumber[255]; 12} NUMBER_INFO ; 13 14
回答1件
あなたの回答
tips
プレビュー