首页 > 解决方案 > Python读取c typedef struct

问题描述

继续我之前的问题,我已经尝试了 ctypes、struct 和 nametuple,但我仍然无法获取数据。如果我将此 dll 文件导入我的 c++ 程序,我设法让它工作。有人可以帮助解决这个问题会非常有帮助。非常感谢!

c++代码

printf("Number: %s\n", NET_DVR_PLATE_INFO().sLicense);

c代码

typedef struct tagNET_DVR_PLATE_INFO
{
    BYTE  byPlateType;                    
    BYTE  byColor;                        
    BYTE  byBright;                        
    BYTE  byLicenseLen;                    
    BYTE  byEntireBelieve;                
    BYTE  byRegion;                      
    BYTE  byCountry;                      
    BYTE  byArea;                         
    BYTE  byPlateSize;                    
    BYTE  byRes[15];                     
    char  sPlateCategory[MAX_CATEGORY_LEN/*8*/];
    DWORD dwXmlLen;                       
    char* pXmlBuf;                   
    NET_VCA_RECT    struPlateRect;       
    char sLicense[MAX_LICENSE_LEN];       
    BYTE byBelieve[MAX_LICENSE_LEN];    
}NET_DVR_PLATE_INFO, *LPNET_DVR_PLATE_INFO;

蟒蛇代码

hcnetsdk = ctypes.windll.LoadLibrary(".\\HCNetSDK.dll")
class NET_DVR_PLATE_INFO(ctypes.Structure):
_fields_ = [
    ("byPlateType", ctypes.c_byte), 
    ("byColor", ctypes.c_byte), 
    ("byBright", ctypes.c_byte), 
    ("byLicenseLen", ctypes.c_byte),
    ("byEntireBelieve", ctypes.c_byte), #
    ("byRegion", ctypes.c_byte), 
    ("byCountry", ctypes.c_byte), 
    ("byArea", ctypes.c_byte), 
    ("byPlateSize", ctypes.c_byte), 
    ("byRes", ctypes.c_byte * 15), 
    ("sPlateCategory", ctypes.c_char * 8), 
    ("dwXmlLen", ctypes.c_short), 
    ("pXmlBuf", ctypes.c_char), 
    ("sLicense", ctypes.c_char * 16), 
    ("byBelieve", ctypes.c_byte * 16)]

def getPlateNumber():
    platenumber= NET_DVR_PLATE_INFO()
    y = hcnetsdk.platenumber.sLicense
    print(y)

我会接到错误电话

AttributeError: function 'platenumber' not found

标签: pythonc++cdll

解决方案


推荐阅读