python - 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
解决方案
推荐阅读
- mongodb - MongoDB 未在 Ubuntu 18.04 服务器中正确安装
- javascript - 为什么要将 Promise 对象存储在变量中?
- api - 如何使用信任平台从数据产品中获取数据?
- java - 有没有办法用xml配置替换java spring config(有注释)?
- python - Discordpy 嵌入未发送
- c# - 启用了“允许空值”的参数的实体框架异常
- php - 将当前目录中的所有imgs放在数组PHP中
- python - 如何在python中将文本文件转换为json格式
- ruby-on-rails - 具有 3 个不同键的散列,每个键指向一个实例数组。如何按 id 对数组进行排序?
- android - Android、MVI 模式 + Kotlin Flow + Room + Retrofit,如何组合在一起?