Pythonを始めたばかりの初心者です。
プログラムはVBAしかしたことがありません。
カードリーダーを認識
マイナンバーカードから電子署名するプログラムを
Pythonで作成したいです。
WEBで調べたところ、winscard.dll を使うとカードリーダーの認識・接続ができるとのことでした。
型指定したほうが良いとアドバイスをいただいたので、
.argtypesを使用しています。
Python
1# -*- coding: utf-8 -*- 2import sys 3import ctypes 4from ctypes import * 5import typing as tp 6 7def main(): 8#WinsCardの関数の型を指定する 9SetTypes() 10#接続確認 11con_text() 12print(type(hcontext)) 13 14 15def SetTypes(): 16 17# SCardEstablishContext 18lib.SCardEstablishContext.argtypes = (ctypes.c_long, ctypes.c_long, ctypes.c_long, ctypes.POINTER(ctypes.c_long)) 19lib.SCardEstablishContext.restype = ctypes.c_long 20 21 22 23 24def con_text(): 25print("con:" + str(type(hcontext))) 26ret = lib.SCardEstablishContext(0, 0, 0, ctypes.POINTER(hcontext)) 27print(ret) 28return hcontext 29 30 31"""""" 32### main 33"""""" 34 35SCARD_SCOPE_USER = c_long 36hcontext = ctypes.POINTER(ctypes.c_long) 37lib = ctypes.WinDLL("WinScard") 38print(type(hcontext)) 39main() 40
実行すると
ctypes.ArgumentError: argument 4: <class 'TypeError'>: expected LP_c_long instance instead of _ctypes.PyCPointerType
というエラーが出てしまいます。
print("con:" + str(type(hcontext)))
としたところでは、
con:<class '_ctypes.PyCPointerType'>
と表示されているので、型はあっている気がするのですが、エラーになってしまいます。
何がおかしいのでしょうか。
そもそも指定している型や指定の仕方がおかしいのでしょうか。
補足情報(FW/ツールのバージョンなど)
PyCharm で開発しています。
カードリーダーはSONYのRC-S380です。
HPKIカードに接続しようとしています。
よろしくお願いします。
あなたの回答
tips
プレビュー