ctypes.ArgumentError: argument 2: type 'exceptions.TypeError': Don't know how to convert parameter

2023-11-09

错误描述

我在用python的ctypes库调用c++的.so文件时候,出现了下面的错误:

ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: Don't know how to convert parameter 2

在这里插入图片描述
下面对我遇到这个问题时的情况做一下说明:
C++源文件中的函数需要传入的第二个参数是double型:

double a_mov(int ctrl, double pos_x, double pos_y){
	a._pos._x = pos_x;
	a._pos._y = pos_y;
	a._pos._x = op_pos_x;
	a._pos._y = op_pos_y;

	a0.cal_next_pos(b0._pos, des_pos, W_O, W_T, W_D, W_C, P_O, P_T, P_D, P_C);
	if(ctrl == 0)
		return a0._next_pos._x;
	else
		return a0._next_pos._y;
}

python程序:
在调用之前,我先用下面的程序(注释1处)将函数返回类型设置为c_double
并在(注释2处)将变量last_a_x,last_a_y设置为c_double类型,
运行结果是:只成功输出了一次,输出第二次时出现了错误
按理说,a_x变量(注释3处)的类型应该是c_double,但是我输出它的类型进行测试(注释4处)时发现,它的类型是float:
在这里插入图片描述
也即是说,(注释1处)的修改只是将函数的返回类型修改为了ctypes里的c_double,在python对应为float类型。(c、ctypes和python之间的对应关系详见参考资料【2】)

from ctypes import *
pos = CDLL('./angleStreategy.so')
pos.init()

a_mov = pos.a_mov
a_mov.restype = c_double  #----------1

last_a_x = c_double(0.0)
last_a_y = c_double(0.0) #----------2

for i in range(0,10):
	a_x = pos.a_mov(0,last_a_x,last_a_y)
	a_y = pos.a_mov(1,last_a_x,last_a_y) #----------3
	print(type(a_x)) #-----------4
	last_a_x = a_x
	last_a_y = a_y #----------5
	print(a_x)
	print(a_y)

解决方法

将(注释5处)修改为

last_a_x = c_double(a_x)
last_a_y = c_double(a_y)

问题解决!
(问题比较特殊,所以说的比较详细,这样才有参考价值
参考资料:

【1】python调用c/c++代码以及解决ctypes.ArgumentError: argument 1: class ‘TypeError’: Don’t know how to convert
【2】python中运用ctypes库实现c风格变量的定义和调用

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

ctypes.ArgumentError: argument 2: type 'exceptions.TypeError': Don't know how to convert parameter 的相关文章

  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • U盘重装系统教程

    重装系统不管是U盘启动还是光盘启动 最终是否可以引导u盘装系统 很大取决于PE或者DOS系统能否识别出来U盘 一 准备工作 制作大白菜U盘启动盘 需要下载一个windows系统文件 就是win7系统 win10系统文件这类的 到U盘里 便可
  • 代理模式之静态代理

    一 什么是代理模式 代理模式 为其他对象提供一种代理 以控制对这个对象的访问 代理类的对象本身并不真正实现服务 我们在访问实际对象时 是通过代理对象来访问的 二 代理模式的分类 静态代理 代理和被代理之前都是确定的 都实现相同的接口或继承相
  • vue锚点定位(tab切换定位不同的div位置)

    1 效果演示 2 HTML部分 div class tabs div class info tit span class pointer css3 lang CN 集团简介 Group profile span span class poi
  • IntelliJ IDEA配置java环境以及解决IDEA不能直接运行单个JAVA文件

    写Java代码选择IEDA的原因是我之前用的Pycharm写python 而IEDA和pycharm几乎一模一样的用法 而且IEDE可以写Java Python等很多语言 只要安装了对应的插件 File gt Settings gt Plu
  • C语言 -- 链表(企业级,侵入式链表)

    目录 节点结构体的实现 初始化链表 插入链表 遍历链表 删除节点 销毁链表 用户test 侵入式链表 内核链表 普通单链表和侵入式单链表的区别在于 普通的单链表的结点指针域指向的是下一个结点的内存首地址 侵入式单链表的结点指针域指向的是下一
  • VUE设置Echarts Loading及样式

    1 先引入echarts import as echarts from echarts 2 利用Echart自带的loading方法 如果是动态数据应该放在请求之前开始loading 初始化 let charts echarts init
  • 前端工作怎么包装简历,需要掌握哪些知识项目

    要想找个好的工作 最少有几个项目实战拿的出来 Web前端岗位需要掌握的知识 一 前端相关概念建立 主要内容 浏览器的概念介绍 浏览器的作用 工作方式 浏览器的概念介绍 浏览器的作用 工作方式 HTTP协议 协议产生的原因 作用 及内容 页面
  • unbutu docker 添加日志

    新建的docker默认是没有日志的 如下展示 tail f var log cron log tail cannot open var log cron log for reading No such file or directory t
  • Windows terminal安装和配置

    Windows terminal终端比cmd强大许多 其中可以包含cmd和powershell甚至ubuntu子系统 同时还可以进行个性化 打造更精美的终端 安装 进入Windows自带的Microsoft Store 搜索Windows
  • 浏览器打开windows桌面应用

    场景需要在浏览器打开桌面安装的lis应用 这里用到注册表 注意 后面的 路径 两个斜杠 lis可以替换成其他需要打开的应用 lis reg 如下 保存双击执行下 Windows Registry Editor Version 5 00 HK
  • Android 集成 支付宝

    一 到支付宝官网https b alipay com order techService htm channel psl下载 快捷支付 无线 开发包 将alipay sdk common文件夹下的alipaysdk jar alipayse
  • 基本排序算法

    前言 该算法总结针对的是算法设计与分析课程所提到的算法 对于不同的人群可能获益有所不同 在叙述时会对一些较为简单的算法进行概性描述 目的是简单的告诉读者算法实现的基本原理 对一些较为复杂的算法则会付诸大量的笔墨 以求对算法的理解能够更加的透
  • 「转」plt.legend()简明使用教程

    原文链接https blog csdn net helunqu2017 article details 78641290 感谢作者辛勤付出 仅作笔记使用 侵删 1 图例legend基础语法及用法 legend语法参数如下 matplotli
  • 用一个程序员的角度来遐想第五代或第六代计算机

    提前申明 我对这一行了解的不够深入 或许是因为这才所以初生牛犊不怕虎 以至于对计算机有很多构想 我先来说一下当今计算机的发展历程 第一代 1946 1957年 是电子计算机 它的基本电子元件是电子管 内存储器采用水银延迟线 外存储器主要采用
  • TensorFlow2.1.0安装教程

    TensorFlow2 1 0安装教程 安装步骤 常用IDE安装 CUDA安装 CUDA软件安装 cuDNN神经网络加速库安装 配置环境变量 TensorFlow安装 更新 TensorFlow是一款优秀的深度学习框架 支持多种常见的操作系
  • 从0到1搭建 Rollup + TypeScript 模板工程

    哈喽 大家好 我是 SuperYing 今天我们来聊聊如何从 0 到 1 搭建一个 Rollup TypeScript 工具库模板工程 包括从创建文件夹开始 到依赖配置 打包编译等一整套内容 Rollup 是一个 JavaScript 模块
  • CWE-125: Out-of-bounds Read(越界读取)

    ID 125 类型 基础 结构 简单 状态 草稿 描述 软件读取缓冲区之前或者之后的数据 扩展描述 通常 这会允许攻击者从其它内存位置读取敏感信息或导致崩溃 假定存在用于停止读取操作 如字符串中的nul 的哨兵变量时 当代码读取可变数量的数
  • 哨兵架构&redisCluster-Redis(五)

    上篇文章介绍了主从架构以及lua脚本 主从架构 lua脚本 Redis 四 https blog csdn net ke1ying article details 131159229 Sentinel集群 主从的搭建我们已经完成 但如果主节
  • 优化命令之top——实时显示进程动态/查看进程信息

    目录 一 top简介 二 启动TOP 2 1第一行含义 2 2第二行含义 2 3第三行含义 2 4第四行含义 2 5第五行含义 2 6第六行含义 三 top常用按键 3 1按 Z 键更改输出的颜色 我发现这让输出更容易被眼睛看到 3 2 按
  • ctypes.ArgumentError: argument 2: type 'exceptions.TypeError': Don't know how to convert parameter

    错误描述 我在用python的ctypes库调用c 的 so文件时候 出现了下面的错误 ctypes ArgumentError argument 2