如何使用 iso_c_binding 声明指针的指针?

2023-12-08

我正在写一个iso_c_绑定在 Fortran 中调用具有以下原型的 C 函数

int zmat_run(
    const size_t inputsize,
    unsigned char *inputstr, 
    size_t *outputsize, 
    unsigned char **outputbuf,
    const int zipid, 
    int *ret, 
    const int iscompress
);

我的问题是如何声明unsigned char **outputbuf,在这个接口中,在 c 函数内部用于分配输出缓冲区的指针?

另外,我应该在 Fortran 中使用什么数据类型作为传递给这个的实际参数outputbuf范围?它应该是可分配的吗? (如果它是在 c 函数内部分配的)?

我目前起草了这个模块,但尚未测试它(我怀疑它会起作用)。

module zmatlib
  use iso_c_binding, only: c_char, c_size_t, c_ptr, C_NULL_CHAR
  interface
    integer(c_int) function zmat_run(inputsize, inputbuf, outputsize, outputbuf, zipid, ret, level) bind(C, name="zmat_run")
      use iso_c_binding
      integer(c_size_t), value :: inputsize
      integer(c_int), value :: zipid, level
      integer(c_size_t),  intent(out) :: outputsize
      integer(c_int),  intent(out) :: ret
      character(kind=c_char),  intent(in)  :: inputbuf(*)
      character pointer(c_ptr),intent(out) :: outputbuf
    end function zmat_run
  end interface
end module

Try 类型(C_PTR),意图(输出)。然后你需要使用Fortran函数c_f_指针将 C 指针与 Fortran 指针关联起来。大概是类型C_CHAR.

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

如何使用 iso_c_binding 声明指针的指针? 的相关文章

随机推荐

  • 如何创建自己的资源名称?

    我可以在中使用我自己的资源名称吗themes xml 例如
  • 由于未注册 Windows.Launch 合同,Windows 10 分配的访问应用程序无法启动

    我有一个 WPF 应用程序 我已使用以下命令将其转换为 UWP 应用程序DesktopAppConverter为了运行它分配的访问权限模式 转换后的应用程序在非分配访问模式下运行时可以工作 可以安装并正常运行 但是 当我将其设置为分配的访问
  • 无法使用 cURL 将 SSH 密钥发送到 Github

    我正在尝试将我的公共 ssh 密钥发送到 Github 我将密钥设置为 shell 中的变量 但它给出了key is invalid You must supply a key in OpenSSH public key format错误
  • 在堆栈弹出中反应本机路由通量重新渲染组件

    如何重新运行 React 组件生命周期方法来确定在从堆栈转换回以前的屏幕时是否需要重新渲染React Native 路由器 Flux 设想 场景 A gt B gt A 假设 A 是初始场景 我们使用 a 从 A 导航到 B推即 Actio
  • 为什么我们先复制然后移动?

    我在某处看到代码 其中有人决定复制一个对象 然后将其移动到类的数据成员 这让我感到困惑 因为我认为移动的全部目的是为了避免复制 这是示例 struct S S std string str data std move str 这是我的问题
  • 带有列表和字典的嵌套循环

    所以我有点陷入了一个问题 本质上 我想使用列表和字典运行一个嵌套循环 但我似乎不知道如何操作 我的用例是运行一个 playbook 它将通过使用主体列表签署公钥来生成 SSH 证书 我有一个充当跳转主机的主机列表 称为 bastionHos
  • 如何获取java日历中每月第一个星期三的日期

    我如何使用java日历类获取该月下一个第一个星期三的日期 例如 Today 24 03 2012 the next first Wednesday will be 04 04 2012 On 05 04 2012 the next firs
  • 这个预提交钩子如何修复尾随空格?

    发生了什么事这个预提交钩子 我认为更改文件会导致它们被重新暂存 bin sh A git hook script to find and fix trailing whitespace in your commits Bypass it w
  • x86-64 分段错误保存堆栈指针

    我目前正在关注本教程 但我不是那所学校的学生 GDB 给我一个分段错误thread start在线上 movq rsp rdi save sp in old thread s tcb 当我回溯时 这是附加信息 0 thread start
  • 如何使用 JPA 映射 Duration 类型

    我在一个类型的类中有一个属性字段javax xml datatype Duration 它基本上代表一个时间跨度 例如 4 小时 34 分钟 JPA 告诉我这是一个无效类型 这并没有让我感到震惊 这有什么好的解决办法吗 我可以实现我自己的
  • 如何将输出写入 Android 中的日志?

    我想将一些调试输出写入日志以使用 logcat 进行查看 如果我向 System out 写入一些内容 则该内容已显示在 logcat 中 写入日志并向输出添加级别和标签的干净方法是什么 调查android util Log 它允许您写入具
  • 如何捕获 Flash 影片成功加载时的事件触发?

    我目前正在使用 jQuery 以及 swfObject 将 swf 影片动态嵌入到我的网页中 我目前在将 immem 的音乐播放器嵌入我的网页时遇到问题 因为他们的嵌入代码没有任何加载屏幕 因此 当我使用 swfObject 替换元素时 该
  • 从 res/raw 文件夹设置铃声

    我正在尝试在中设置音频文件 res raw 以编程方式将文件夹作为默认铃声 我有以下文件 如下所示 myapp res raw file mp3 我有以下代码 但不幸的是它完全无法设置铃声 我不确定是什么导致了这个问题 但想知道是否有人有任
  • django-admin.py:找不到命令(bluehost 服务器)

    经过6个多小时的挣扎 我决定寻求帮助 任务 在Django的帮助下创建一个项目工具 Windows Vista Putty SSH地点 Bluehost www bluehost com 服务器 我已经阅读过有关同一问题的这些主题 bash
  • TIME_WAIT 连接过多,出现“无法分配请求的地址”

    我有一个小型 Web 应用程序 它打开 TCP 套接字连接 发出命令 读取响应 然后关闭对特定 REST 端点的每个请求的连接 我已经开始使用 Apache JMeter 对端点进行负载测试 并注意到运行一段时间后 我开始看到诸如 无法分配
  • Laravel 4 - 无法检索一对多关系中的数据

    我有一个报价模型 class Quote extends Eloquent public function quote lines return this gt hasMany QuoteLine 还有一个 QuoteLine 模型 cla
  • 添加 Azure Ad Oauth2 JWT 令牌声明

    我只是想知道是否有办法通过 Azure 门户向 Azure Ad OAuth2 JWT 令牌添加或指定自定义声明 或者这是唯一可能的代码方面 据我所知 Azure AD目前不支持发出自定义声明 作为解决方法 我们可以使用 Azure AD
  • 通过名称获取 React 组件

    有没有办法通过名称访问 React 组件 例如 使用 React devtools 我可以搜索组件并使用以下命令访问控制台中最近选择的组件 r 有没有办法在没有 React 开发工具的情况下访问这些组件 IE 我可以使用查询来获取这些组件吗
  • 删除R中欧元符号后面的字符

    我有一个欧元符号保存在 欧元 变量中 euro lt u20AC euro 1 并且 eurosearch 变量包含 此 SOW 中定义的服务 价格为 15 896 80 欧元 如果从 执行 eurosearch 1 services as
  • 如何使用 iso_c_binding 声明指针的指针?

    我正在写一个iso c 绑定在 Fortran 中调用具有以下原型的 C 函数 int zmat run const size t inputsize unsigned char inputstr size t outputsize uns