Python ctypes 参数与 DLL - 指向双精度数组的指针

2024-03-17

我是一名使用 Python 中的 ctypes 的新手编码人员,并尝试使用用 C 编写的 DLL 中的函数。我在 SO 上发现了很多与我类似的问题,但没有任何答案可以回答此类难题。

我已经很好地加载了 DLL,但是我需要调用的函数之一需要一个指向 6 个双精度数数组的指针来将值转储到其中,而且我不知道如何通过 Python 为该函数提供所需的内容。 (我在 C 中尝试这样做的失败是另一个故事。)

我已经尝试了 ctypes.POINTER(c_double) 的各种排列,使用 byref()、POINTER(c_double * 6) 等,对于所有这些排列,最坏的情况是类型错误,最好的情况是访问冲突。

来自 DLL 文档:

int swe_calc_ut (double tjd_ut, int ipl, int iflag, double* xx, char* serr)

该函数使用儒略日时间进行计算,以双倍形式返回行星体的经度、纬度等。

我最接近传递 DLL 接受的数据类型的是使用此代码,只是尝试从 swe_calc_ut 中获取 6 个双精度数中的任何一个:

dll = windll.LoadLibrary(# file path)

# retype the args for swe_calc_ut
py_swe_calc_ut = dll.swe_calc_ut
py_swe_calc_ut.argtypes = [c_double, c_int, c_int, c_double, c_char_p]
py_swe_calc_ut.restype = None

tjd = c_double(# some value from elsewhere)

returnarray = c_double()
errorstring = create_string_buffer(126)

py_swe_calc_ut(tjd, c_int(0), c_int(64*1024), returnarray, errorstring)

当我尝试按原样运行此程序时,出现错误:

OSError: exception: access violation writing 0x0000000000000000

使用 byref() 会给我一个类型错误等。

如果有人能指出我从原始 DLL 函数中获取所需双精度的正确方向,我将永远感激不已;我很困惑,无法将其付诸实践。


这(未经测试)应该有效。第4个参数是类型POINTER(c_double)。相当于C的double returnarray[6]类型是c_double * 6该类型的一个实例是returnarray= (c_double * 6)()。另外,如果您已经声明了参数类型,则不需要包装输入参数,例如int(0);通过0很好:

dll = windll.LoadLibrary(# file path)

# retype the args for swe_calc_ut
py_swe_calc_ut = dll.swe_calc_ut
py_swe_calc_ut.argtypes = [c_double, c_int, c_int, POINTER(c_double), c_char_p]
py_swe_calc_ut.restype = None

tdj = 1.5 # some value
returnarray = (c_double * 6)()
errorstring = create_string_buffer(126)

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

Python ctypes 参数与 DLL - 指向双精度数组的指针 的相关文章

  • 有没有办法将 boost::json::serializer 切换为美化输出?

    Using boost json serializer如中的示例所示文档 快速查看 http vinniefalco github io doc json json usage quick look html以紧凑格式保存 json tre
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • 如何使用 Python Pandas 制作 DataFrame 切片并在特定切片中“fillna”?

    问题 让我们从 Kaggle 获取泰坦尼克号数据集 我有包含 Pclass 性别 和 年龄 列的数据框 我需要用特定组的中位数填充 年龄 列中的 NaN 如果是来自一等的女性 我想用一等女性的中位数填写她的年龄 而不是整个年龄列的中位数 问
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • python 中的异步编程

    python 中有异步编程的通用概念吗 我可以为一个函数分配一个回调 执行它并立即返回主程序流 无论该函数的执行需要多长时间吗 您所描述的 主程序流程在另一个函数执行时立即恢复 不是通常所说的 异步 又名 事件驱动 编程 而是 多任务 又名
  • 在 Django 中翻译文件时的 Git 命令

    我在 Django 中有一个现有的应用程序 我想在页面上添加翻译 在页面上我有 trans Projects 在 po 文件中我添加了 templates staff site html 200 msgid Projects msgid P
  • Python写入dbf数据时出错

    我得到这个错误 DbfError unable to modify fields individually except in with or Process 如何修复它 这是我的code with dbf Table aa dbf as
  • 使用宏计算源文件行数?

    是否可以使用 C C 预处理器将源文件中的行数计算为宏或某种编译时可用值 例如 我可以更换吗MAGIC1 MAGIC2 and MAGIC3在下面 并在使用时以某种方式获取值 4MAGIC3 MAGIC1 can be placed whe
  • 使用多行选项和编码选项读取 CSV

    在 azure Databricks 中 当我使用以下命令读取 CSV 文件时multiline true and encoding SJIS 似乎编码选项被忽略了 如果我使用multiline选项 Spark 使用默认值encoding那
  • printf() 使用字符串表“解码器环”调试库

    我写这封信是想看看你们中是否有人见过或听说过我即将描述的想法的实现 我有兴趣为嵌入式目标开发 printf 风格的调试库 目标非常遥远 并且我和目标之间的通信带宽预算非常紧张 因此我希望能够以非常有效的格式获取调试消息 通常 调试语句如下所
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • TreeView:仅在子节点中存在复选框

    我需要一个树视图控件 根节点没有复选框 只有图像 所有子节点都有一个复选框 图像 C net 2 0 winforms 不是 wpf WinForms树视图默认不支持混合复选框 非复选框节点 您可以在树视图上全局启用复选框 并使用以下命令在
  • 检测计算机何时解锁 Windows

    我用过这个优秀的方法 https stackoverflow com questions 20733441 lock windows workstation using python 20733443锁定 Windows 计算机 那部分工作
  • 在 Mac (Catalina) 上安装 PyGame 时出错 [重复]

    这个问题在这里已经有答案了 我一直在尝试将 PyGame 安装到 Catalina 上的 Mac 上 但不知道如何安装 我收到的错误消息是 SystemExit error command gcc failed with exit stat
  • 使用 Tweepy 获取推文时出错

    我有一个用于获取推文的 Python 脚本 在脚本中我使用该库 Tweepy 我使用有效的身份验证参数 运行此脚本后 一些推文存储在我的 MongoDB 中 有些则被 if 语句拒绝 但我仍然收到错误 requests packages u
  • 为什么调试器只显示数组指针中的一个元素?

    首先 我知道new是执行此操作的 C 方法 我只是表明有不止一种方法可以重现此错误 而且两种方法都令人难以置信的令人沮丧 我有两种形式的源文件 我正在尝试调试另一个编程作业 但我并没有寻求帮助 基本上 我正在尝试重新实施set作为一个类 具
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • 透视包含字符串的 Pandas Dataframe - “没有要聚合的数字类型”错误

    关于此错误有很多问题 但环顾四周后 我仍然无法找到 解决解决方案 我正在尝试用字符串旋转数据框 以使一些行数据变成列 但到目前为止还没有成功 我的 df 的形状
  • 从 xgb.train() 获取概率

    我是 Python 和机器学习的新手 我在网上搜索了我的问题 并尝试了人们建议的解决方案 但仍然没有得到它 如果有人能帮助我 我将非常感激 我正在开发我的第一个 XGboost 模型 我已经使用 xgb XGBClassifier 调整了参

随机推荐

  • 检查字符串是否为日期 Postgresql

    有没有什么功能PostgreSQL返回Boolean给定的字符串是否是日期 就像ISDATE 在 MSSQL 中 ISDATE January 1 2014 您可以创建一个函数 create or replace function is d
  • 在 OS X El Capitan 上使用 libssl 编译 C 程序?

    我有一个使用 libssl 的简单 C 程序 在 Linux 上 我安装了 openssl dev 包并使用以下行编译了程序 gcc test libssl c o test libssl lcrypto lssl 现在我想在我的 Mac
  • 如何将数组的元素作为单独的参数传递给函数?

    我有一个像这样的函数 但有更多参数 function do something n1 n2 n3 return n1 n2 n3 然后我有一个包含 3 个项目的数组 它们是该函数的参数 my array 10 123 14 例如 do so
  • SQL Server JDBC 异常

    当使用 ANT 构建我的 Java 应用程序时 我不断收到此错误 我已多次尝试使用 SQLJDBC JAR 和 SQLJDBC4 JAR 但不断收到此错误消息 我完全困惑为什么即使升级到 sqljdbc4 jar 后也会收到此错误 java
  • Nginx 未运行且没有错误消息

    我正在尝试启动我的 nginx 服务器 当我输入 gt etc init d nginx start 时 出现一条消息 正在启动 nginx 然后什么也没有发生 没有错误消息 当我检查 nginx 的状态时 我发现它没有运行 这是我的 et
  • 程序在 execvp( command.argv[0], command.argv) 之后停止

    我正在编写一个小型 shell 程序 它接受命令并执行它 如果用户输入无效命令 if 语句将返回 1 如果命令正确 则执行该命令 但是一旦执行该命令 程序就会结束 我做错了什么 不执行后面的代码行 我已经使用 ls 和 cat 命令测试了
  • 使用公式内现有单元格的值

    我正在使用 Excel 2010 中的 相机 功能 我的目标是有一个单元格 其中有一个我可以手动输入的日期 并且在其下方 公式将获得更新的值 该值代表另一个 Excel 文件中的工作表名称 并向我显示更新的屏幕截图 例如 细胞A1 has
  • 如何隐藏 VS Code 中的状态栏?

    如何隐藏 Visual Studio Code 中的状态栏 应该可以隐藏状态栏 有什么办法可以隐藏它吗 在 查看 菜单中 我找不到隐藏它的选项 View gt Appearance gt Show Status Bar Screenshot
  • subprocess.wait() 不等待 Popen 进程完成(使用线程时)?

    我在使用时遇到一些问题subprocess Popen 使用线程从我的 python 脚本生成同一应用程序的多个实例 使它们同时运行 在每个线程中 我使用以下命令运行应用程序popen 调用 然后我通过调用等待它完成wait 问题似乎在于w
  • 解析两个 XML 标签之间的值

    我知道以前有人问过这个问题 但我似乎找不到合适的解决方案 所以我会说明问题 我有一个类似于 XML 文件的字符串 它不是 XML 字符串 但有开始和结束标记 所有信息都位于一行中 例如
  • 电子邮件客户端无法验证带有 bouncycastle 签名的附件和图像的电子邮件

    我有一个邮件编辑器构建哑剧消息并使用邮件签名服务 签名是在sign and 构建签名生成器 方法 收到邮件后 邮件客户端检测到签名 但抱怨邮件可能已被篡改 邮件客户端能够显示证书 它显示所有证书 包括 CA 因此 要么基于 Bouncyca
  • 让 Rscript 从 stdin 读取或获取输入

    我了解了如何让 Rscript 在给定文件名作为参数时执行我想要的操作 例如如果我的 Rscript 被调用script并包含 usr bin Rscript path lt commandArgs 1 writeLines readLin
  • Doctrine Querybuilder ORDER BY 子句不在 SELECT 列表中

    我有以下查询生成器 queryBuilder this gt createQueryBuilder recipient gt leftJoin recipient message message gt orderBy message dat
  • $.post 仅适用于警报 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 当我调用带有警报的功能时 该功能运行良好 function post var cvs client nbr val var cs cs va
  • Ruby on Rails:在单个数据库单元中保存多个值

    如何在 Ruby on Rails 应用程序中的单个单元格记录中保存多个值 如果我有一个名为Exp列名为 Education Experience and Skill 如果我希望用户在单行中存储多个值 例如 教育机构或技能 最佳实践是什么
  • 崩溃报告显示在 App Store Connect 中,但不显示在 Xcode Organizer 中

    我们已将应用程序上传到 TestFlight 进行 Beta 测试 当应用程序在测试人员的设备上崩溃时 崩溃会按预期显示在 App Store Connect 中 但不会显示在 Xcode Organizer 中 管理器中的崩溃选项卡显示了
  • PagedListAdapter.submitList() 更新现有项目时行为异常

    本主题的小故事 应用程序只是在确认后通过对话框更新单击的行的值 在房间数据库上使用分页方案 当添加或删除项目时 会获取最新的数据集并将其传递给submitList方法 然后所有更改都会被看到并且运行良好 问题从这里开始 如果更新了现有项目
  • 设置 AssemblyInfo.cs 的默认值

    更改创建 AssemblyInfo cs 的默认值的最佳方法是什么 例如我不想要 AssemblyCompany 和 AssemblyCopyright 中的 Microsoft 位 assembly AssemblyCompany Mic
  • 使用Python unicode的特殊字符问题

    usr bin env python coding utf 8 def splitParagraphIntoSentences paragraph break a paragraph into sentences and return a
  • Python ctypes 参数与 DLL - 指向双精度数组的指针

    我是一名使用 Python 中的 ctypes 的新手编码人员 并尝试使用用 C 编写的 DLL 中的函数 我在 SO 上发现了很多与我类似的问题 但没有任何答案可以回答此类难题 我已经很好地加载了 DLL 但是我需要调用的函数之一需要一个