我将创建一个将访问 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