首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C到Python通过SWIG:无法获取void**参数来保存它们的值

首先,我们需要了解C到Python通过SWIG的过程中,如何获取void**参数的值。

在C语言中,void是一个指向void*的指针,通常用于传递指针的地址。在Python中,可以使用ctypes库来处理void类型的参数。

以下是一个示例代码,展示了如何在Python中使用ctypes库来处理void**参数:

代码语言:python
代码运行次数:0
复制
from ctypes import *

# 定义一个C函数,该函数接受一个void**参数
c_func = CDLL('./libexample.so').c_func
c_func.argtypes = [POINTER(POINTER(c_int))]

# 定义一个回调函数,该函数将在C函数中调用
def callback(ptr):
    # 获取void**参数的值
    value = cast(ptr, POINTER(c_int)).contents.value
    print('Value:', value)

# 调用C函数
c_func(callback)

在上面的示例代码中,我们首先定义了一个C函数c_func,该函数接受一个void参数。然后,我们定义了一个回调函数callback,该函数将在C函数中调用。在回调函数中,我们使用cast函数将void参数转换为一个指向整数的指针,然后使用contents属性获取该指针指向的值。最后,我们调用C函数并传递回调函数作为参数。

总之,在C到Python通过SWIG的过程中,如果需要获取void**参数的值,可以使用ctypes库来处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SWIG 官方文档第三部分 - 机翻中文人肉修正

很有可能,您正在阅读本章是出于以下两个原因之一;您要么想自定义 SWIG 的行为,要么无意中听到有人嘟囔着一些关于“typemaps”的难以理解的胡言乱语,然后问自己“typemaps,那些是什么?” 也就是说,让我们先做一个简短的免责声明,即“Typemaps”是一种高级自定义功能,可以直接访问 SWIG 的低级代码生成器。不仅如此,它们还是 SWIG C++ 类型系统(它自己的一个重要主题)的组成部分。typemaps 通常不是使用 SWIG 的必需部分。因此,如果您已经找到了进入本章的方法,并且对 SWIG 默认情况下已经做了什么只有一个模糊的概念,那么您可能需要重新阅读前面的章节。

03
  • 基于 Openpose 实现人体动作识别

    伴随着计算机视觉的发展和在生活实践中的广泛应用,基于各种算法的行为检测和动作识别项目在实践中得到了越来越多的应用,并在相关领域得到了广泛的研究。在行为监测方面,不仅仅有通过图形、温湿度、声音等信息进行蜂群行为的监测,同时更多的应用是集中在人类行为监测上。而人体姿态识别作为行为监测重要参考依据在视频捕捉、计算机图形学等领域得到了广泛应用。其中传统的人体姿态识别方法有RMPE模型和Mask R-CNN模型,它们都是采用自顶向下的检测方法,而Openpose作为姿态识别的经典项目是采用的自底向上的检测方法,主要应用于行为监测、姿态纠正、动作分类,在智能家居、自动驾驶、智能监控等领域局具有重要的研究意义和应用价值。

    03

    2019-04-08 Swig java Jni开发指南

    简介: JNI:Java Native Interface,它允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即可。 JNA:Java Native Access是一个开源的Java框架,是Sun公司推出的一种调用本地方法的技术,是建立在经典的JNI基础之上的一个框架。之所以说它是JNI的替 代者,是因为JNA大大简化了调用本地方法的过程,使用很方便,基本上不需要脱离Java环境就可以完成。 Swig可以根据c或c++代码生成jni代码的工具,大大简化jni的开发 Jnaerator可以根据c或c++代码生成jna代码的工具,大大简化jna的开发 从难易度看,使用jnaerator开发jna最简单,代码基本都是自动生成,但是jna开发有个很大的缺点,就是如果c代码过于复杂,比如出现java调用c,然后c再回调java,java返回的结果c还需要继续处理的时候,经常出现不可控制的crash,而jna算是中间层,这个层出现的错误完全无法调试,被逼无奈,我们的项目先用jna开发,不得不转jni开发,在使用swig的过程中,也遇到不少问题,因此总结如下:

    01
    领券