python ctype 初始化结构体

2023-12-13

我的结构包含所有 unsigned char 元素

typedef struct
{
    unsigned char bE;
    unsigned char cH;
    unsigned char cL;
    unsigned char EId1;
    unsigned char EId0;
    unsigned char SId1;
    unsigned char SId0;
    unsigned char DLC;
    unsigned char D0;
    unsigned char D1;
    unsigned char D2;
    unsigned char D3;
    unsigned char D4;
    unsigned char D5;
    unsigned char D6;
    unsigned char D7;
 } CMsg;

下面的函数调用结构体

extern  int  WriteCMessage(HANDLE hDev,CMsg* pMsg);

我将此结构转换为 python ctype

class CMsg(Structure):
   _fields_ = [('bE', c_char),
               ('cH', c_char),
               ('cL', c_char),
               ('EId1', c_char),
               ('EId0', c_char),
               ('SId1', c_char),
               ('SId0', c_char),
               ('DLC', c_char),
               ('D0', c_char),
               ('D1', c_char),
               ('D2', c_char),
               ('D3', c_char),
               ('D4', c_char),
               ('D5', c_char),
               ('D6', c_char),
               ('D7', c_char)]
pmsg = CMsg('\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00')

然后我加载了dll文件

hllDll.WriteCANMessage(handle, pmsg)

但这给出了错误

错误:0x00000000 处访问冲突


你通过了pmsg按值,但该函数需要一个指针。由于您已初始化为全零,因此该函数最终会取消引用NULL指针。然后,ctypes 使用 Windows SEH 将访问冲突路由到 Python 异常。

你需要使用byref(pmsg)来传递参考。另外,定义函数的argtypes以确保在 64 位系统上正确处理指针。

from ctypes import *
from ctypes.wintypes import *

class CMsg(Structure):
    _fields_ = [
        ('bE', c_ubyte),
        ('cH', c_ubyte),
        ('cL', c_ubyte),
        ('EId1', c_ubyte),
        ('EId0', c_ubyte),
        ('SId1', c_ubyte),
        ('SId0', c_ubyte),
        ('DLC', c_ubyte),
        ('D0', c_ubyte),
        ('D1', c_ubyte),
        ('D2', c_ubyte),
        ('D3', c_ubyte),
        ('D4', c_ubyte),
        ('D5', c_ubyte),
        ('D6', c_ubyte),
        ('D7', c_ubyte)]

hllDll = cdll...
hllDll.WriteCANMessage.argtypes = [HANDLE, POINTER(CMsg)]

handle = ...
pmsg = CMsg() #  initially memset to {0}
hllDll.WriteCANMessage(handle, byref(pmsg))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python ctype 初始化结构体 的相关文章

  • 从 Windows Batch (cmd.exe) 中的文件读取环境变量

    我正在尝试从批处理文件中读取变量 以便稍后在批处理脚本 Java 启动器 中使用 理想情况下 我希望所有平台 Unix Windows 上的设置文件都具有相同的格式 并且也是有效的 Java 属性文件 也就是说 它应该看起来像这样 sett
  • 在 SQLAlchemy 中,过滤器是在连接之前还是之后应用?

    使用 SQLAlchemy 我执行如下查询 import models as m import sqlalchemy as sa s session maker q s query m ShareCount m Article join m
  • 在 Python 中延迟转置列表

    所以 我有一个延迟生成的可迭代的三元组 我试图弄清楚如何将其转换为 3 个可迭代对象 分别由元组的第一个 第二个和第三个元素组成 然而 我希望这件事能懒惰地完成 所以 举例来说 我希望 1 2 3 4 5 6 7 8 9 将变成 1 4 7
  • 无法使用安装了启用的 Hyper-V 和 WSL2 的 VirtualBox 启动 Windows 10 客户机 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近将 Windows 10 版本更新为2004 我还将 WSL 更新为 WSL2 我在尝试通过 VirtualBox 使用虚拟机 Wi
  • SVN提交失败,访问被禁止

    最近我面临着提交SVN的问题 我使用的SVN服务器是VisualSVN Server 2 5 9 客户端是TortoiseSVN 1 7 12 起初 一个用户在将文件提交到 SVN 时遇到问题 但该用户仍然可以访问存储库并下载更新 第二台
  • 获取字符串模板中所有标识符列表的函数(Python)

    对于标准库string template在Python中 有没有一个函数可以获取所有标识符的列表 例如 使用以下 xml 文件
  • Asyncio:从未检索到任务异常的怪异

    假设我有一个简单的代码 import asyncio async def exc print 1 0 loop asyncio get event loop loop create task exc try loop run forever
  • Python 中“is”运算符的语义是什么?

    如何is运算符确定两个对象是否相同 它是如何工作的 我找不到它的记录 来自文档 http docs python org reference datamodel html 每个对象都有一个身份 一个类型 和一个值 对象的身份 一旦发生就永远
  • argparse 不检查位置参数

    我正在创建一个脚本 它使用 argparse 接受位置参数和可选参数 我已经阅读了 Doug 的教程和 python 文档 但找不到答案 parser argparse ArgumentParser description script t
  • 提高光线追踪命中功能的性能

    我有一个简单的 python 光线追踪器 渲染 200x200 的图像需要 4 分钟 这对于我的口味来说绝对是太多了 我想改善这种情况 几点 我为每个像素发射多条光线 以提供抗锯齿功能 每个像素总共发射 16 条光线 200x200x16
  • 从 C++ 源文件创建 Windows DLL

    我有多个 C 源文件 我想使用它们创建动态链接库 我在 linux 中使用 gcc shared 和 ln 看到这种情况发生 但是对于 Windows 我想我必须修改源文件才能生成 DLL 有没有办法用提供的源文件生成DLL 类似于linu
  • Pandas 中每列的曲线拟合 + 外推值

    我有一个包含大约 300 列的数据集 每一列都与深度相关 Pandas DataFrame 的简化版本看起来像这样 import matplotlib pyplot as plt import numpy as np import pand
  • 在python中使用编解码器utf-8打开文件错误

    我在 windows xp 和 python 2 6 4 上执行以下代码 但它显示 IOError 如何打开名称带有 utf 8 编解码器的文件 gt gt gt open unicode txt euc kr encode utf 8 T
  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • 将 str.contains 映射到 pandas DataFrame

    python 初学者 我正在寻找创建字符串的字典映射以及关联的值 我有一个数据框 想要创建一个新列 如果字符串匹配 则会将该列标记为 x df pd DataFrame comp dell notebook dell notebook S3
  • 如何将 pandas DataFrame 转换为 TimeSeries?

    我正在寻找一种将 DataFrame 转换为 TimeSeries 而不拆分索引和值列的方法 有任何想法吗 谢谢 In 20 import pandas as pd In 21 import numpy as np In 22 dates
  • 在字符串内打印单引号

    我想输出 XYZ s ABC 我在Python IDLE中尝试了以下3条语句 第一条和第二条语句输出 a before 带打印功能的第三条语句不输出 before 作为 Python 新手 我想了解为什么 之前输出 在第 1 条和第 2 条
  • 如何将 django ModelForm 字段显示为不可编辑

    接受我的初步教训django ModelForm 我想让用户能够编辑博客中的条目 BlogEntry has a date postedTime title and content 我想向用户展示一个编辑表单 其中显示所有这些字段 但仅包含
  • Django 中使用外键的抽象基类继承

    我正在尝试在 Django 支持的网站上进行模型继承 以遵守 DRY 我的目标是使用一个名为 BasicCompany 的抽象基类来为三个子类提供通用信息 Butcher Baker CandlestickMaker 它们位于各自的应用程序
  • 为数据集生成随机 JSON 结构排列

    我想生成 JSON 结构的许多不同排列作为同一数据集的表示 最好不需要对实现进行硬编码 例如 给定以下 JSON name smith occupation agent enemy humanity nemesis neo 应该产生许多不同

随机推荐

  • NSCalendar 日期错误

    我正在尝试使用NSCalendar with NSIslamicCalendar标识符 但当天的结果并不好 她是我的代码 NSCalendar calandar NSCalendar alloc initWithCalendarIdenti
  • 无法将 (PFUser!, NSError) void 类型的值转换为预期参数类型 PFUserResultBlock

    我对 swift 和编程都很陌生 但我正在尝试检索检查用户是否可以登录 并且我相信我做了 Parse 建议的操作 但是我收到了此错误 并且不确定原因 这是我的代码 PFUser logInWithUsernameInBackground u
  • 从 J2SE 应用程序中的 persistence.xml 外部化凭证

    我正在编写一个使用 JPA 进行持久性的 J2SE 应用程序 无企业容器 这是我的persistence xml
  • 如何在 Windows 7 上注册自定义程序来处理 mailto 协议

    好的 这可能是我的系统的问题 但我很难让 Windows 7 将我的自定义 exe 识别为 mailto 协议的默认处理程序 首先 我见过这个 以编程方式向 mailto 协议注册 Windows 程序 接下来 我看到了这些 如何使用 Wi
  • C 语言中的非阻塞 I/O? (视窗)

    我正在尝试在 Windows 终端应用程序上获得非阻塞 I O 仅限 Windows 抱歉 如果我想要一个较短的输入时间 让用户可以按下按钮 但如果他不按下按钮 输入就会停止并且程序会继续执行 该怎么办 例如 一个从 1 计数到用户按下某个
  • MapPageRoute 破坏集成 MVC/WebForms 应用程序中的 ActionLink

    我有一个用 ASP NET 4 0 开发的现有 Web 应用程序 我想向应用程序添加 MVC 功能 因此我按照 Scott Hanselman 的文章将 MVC 集成到应用程序中将 ASP NET MVC 3 集成到现有升级的 ASP NE
  • Jasper Report HTML 项目符号悬挂缩进

    我有一个 Jasper 报告 它使用 HTML 标记来显示 li 标记列表 然而 似乎即使使用最新版本的 Jasper 报告 它仍然无法正确执行悬挂缩进 这就是我要的 TEST TEST TEST TEST TEST TEST TEST T
  • 我们如何创建动态文本视图?

    如何在代码中而不是在 xml 文件中创建文本视图 这是因为我的应用程序中的文本视图数量将根据某个整数发生变化 这是动态创建TextView的代码 LinearLayout layout LinearLayout findViewById R
  • 在网络视图中显示 PDF

    我想在我的应用程序中显示 pdf 文件 我的网络服务为我提供了 pdf 我想将其下载到 SD 卡 然后我想通过 webview 在我的应用程序中显示该 pdf 我也曾因 Android PDF 显示问题而苦苦挣扎了一段时间 我采用了与您提到
  • OWL2 使用一个不同的公理对子类进行建模

    我正在尝试使用 OWL 2 DL 使用 Protege 对一些词汇数据进行建模 我的主类是 Lemma 它有许多公理 使用曼彻斯特语法 Every Lemma hasLanguage some Language Every Lemma ha
  • 在 Node.js 中发送电子邮件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我最近开始编写我的第一个 Node j
  • 如何使用seaborn.objects旋转xticks

    碰巧 有没有办法旋转下图中的 xticks 只是为了让它更具可读性 通常sns xticks 在新的seaborn objects开发中不起作用 这太棒了 tcap assign date time2 tcap date time dt d
  • python 3.5 - django 1.10 - mysqlclient windows 7安装错误

    在 django 中配置 mysql 时 我遇到了非常令人不安的问题 我在 Ubuntu x64 上使用 python 3 5 和 Django 1 10 做到了这一点 但我无法在 Windows 7 上做到这一点 我几乎尝试了一切 我希望
  • goDaddy 网站数据库用户访问被拒绝

    我正在尝试从 godaddy 查看我的网站 域名是在其他地方注册的 托管是来自godaddy 更改 DNS 设置后 我在 godaddy 中创建数据库并导入其中的所有表 之后 我创建了一个用户名并将其授予所有权限 然后 当我尝试连接到数据库
  • WCF 超时错误 - 即使在增加值之后

    我的客户一直抱怨他们收到超时错误 但我没有看到我这边生成的跟踪文件 有人能告诉我如何解决这个问题吗 我已经将 receiveTimeout 增加到 15 分钟 00 15 00 我在 WCF 服务端和客户端都执行了此操作 我的服务不是一个长
  • 与可为空外键的一对一关系

    我想在 EF 中创建一对一关系 其中外键可以为空 因此 可以将其称为 0 1 to 0 1 public class ProductInstance public int Id get set public int SaleId get s
  • 安装plone时不支持的哈希类型

    我尝试安装plone但是当我运行脚本 install sh 时遇到问题 以下是错误详细信息 raise ValueError unsupported hash type s name ValueError unsupported hash
  • 如何用 pandas 为空行着色并导出到 Excel 文件?

    我正在尝试在 Excel 上自动执行一些任务 其中一些包括设置没有任何红色值的单元格 我的 DataFrame 维度中的空单元格 而不是其外部的空单元格 在检查之前的类似答案后 我尝试了以下操作 import pandas as pd Cr
  • 访问动态创建的文本框文本

    我偶然发现了我的 asp net 表单的问题 在我的表单中 最终用户选择要动态创建的多个文本框 这一切都可以与以下代码配合使用 protected void txtAmountSubmit Click object sender Event
  • python ctype 初始化结构体

    我的结构包含所有 unsigned char 元素 typedef struct unsigned char bE unsigned char cH unsigned char cL unsigned char EId1 unsigned