Windowsのdll関数にアクセスするPythonスクリプトを作成します。dllとその機能にアクセスすることに成功しました。今、私はac機能を持っています
FIOSCR331_API int FIOCreateDeviceInfoList (PDEVINFO pDevInfoSet)
問題はPDEVINFO
構造です。Pythonで構造を作成し、この構造にアクセスする必要があります。
C構造体は次のとおりです
typedef struct tagDEVINFO
{
char szDeviceName[MAX_PATH];
char szPCSCName[MAX_PATH];
BOOL bPassedFilter;
BOOL bUpdatePassed;
DWORD dwUpdateOrder;
DWORD dwPnP_ID;
DWORD dwFWVersion;
PDEVEXTENSION pDevExtension;
} DEVINFO, *PDEVINFO;
C関数は次のとおりです
FIOSCR331_API int FIOCreateDeviceInfoList (PDEVINFO pDevInfoSet)
{
int nFIOStatus;
do
{
if ( NULL == pDevInfoSet )
{
printf("this is inside C code\n");
nFIOStatus = IDS_GENERIC_ERROR; //(200)
break;
}
else
printf ("\n%s ",pDevInfoSet->szPCSCName);
}while(false);
}
今私が実装したPythonコード
class DEVINFO(Structure):
_fields_ = [("szDeviceName",c_char_p),
("szPCSCName",c_char_p),
("bPassedFilter",c_bool),
("bUpdatePassed",c_bool),
("dwUpdateOrder",c_ulong),
("dwPnp_ID",c_ulong),
("dwFWVersion",c_ulong),
("pDevExtention",DEVEXTENSION)]
lib = cdll.LoadLibrary('libFIOXXXXX.dll')
print (lib)
devInfo = DEVINFO()
devInfo.szPCSCName = c_char_p(b"this is test")
if devInfo is None:
print("hi")
else:
print("britto")
funcCreateList = lib.FIOCreateDeviceInfoList(devInfo)
print (funcCreateList)
私が得た結果は
britto
this is inside C code
200
問題は、コードが常にNULL状態になることです。つまり、devInfoはNULLです。何故ですか?
新しく追加されました
上記のPython構造体DEVINFOには、別の構造体DEVEXTENSIONが含まれています。DEVEXTENSIONエラーのメンバーにアクセスするにはどうすればよいですか?
print (devInfo.pDevExtension.szName)
これはスローします:
AttributeError: 'LP_DEVEXTENSION" object has no attribute szName