python如何传递给c++结构体指针?前提是swig封

2020-11-23 11:46:07 字数 2621 阅读 8562

1楼:匿名用户

在封装的**间传递指针你要确保他们运行在相同的地址空间里,还要保证指针指向的内存的生存期是安全的,否则这种思路就是错误的。实现方法举例如下:

1、定义了c 结构体和函数如下

typedef struct nameage

nameage , *nameagepointer;

void test(nameagepointer p) // 接收结构体指针

2、python定义结构体如下

#python中结构体定义

class pystruct():

def __init__(self, name, age):

self.name = name

self.age = age

fred = pystruct("fred", 5)

3、假设把第1步里的test封装成example模块,python导入example(既然你都会swig了,这个过程就不啰嗦了)

>>>import example

>>>example.test(pointer(fred))

以上是基本思路,因为搭建开发环境和过程比较繁杂,没有验证过,但是应该没有大问题

python如何传递给c++一个结构体指针?前提是swig封

2楼:mexico卡卡

在封装的**间传递指针你要确保他们运行在相同的地址空间里,还要保证指针指向的内存的生存期是安全的,否则这种思路就是错误的。实现方法举例如下:

1、定义了c 结构体和函数如下

typedef struct nameage

nameage , *nameagepointer;

void test(nameagepointer p) // 接收结构体指针

2、python定义结构体如下

#python中结构体定义

class pystruct():

def __init__(self, name, age):

self.name = name

self.age = age

fred = pystruct("fred", 5)

3、假设把第1步里的test封装成example模块,python导入example(既然你都会swig了,这个过程就不啰嗦了)

>>>import example

>>>example.test(pointer(fred))

以上是基本思路,因为搭建开发环境和过程比较繁杂,没有验证过,但是应该没有大问题

怎么用swig实现在python中继承c++接口类

3楼:

目前已到问题是这样的:我用swig封装了c++函数供python来调用 c++函数需要传入 结构体指针 引用等参数 可是我不知道python怎么传递这种类型的参数 麻烦大神帮忙解答

python调用swig的问题,如何把‘!=’wrap起来。只是简单的代替?

4楼:

我没用过swig,一直是用boost::python来封装c++的。

猜测这个问题是因为swig中没法对重载操作符函数进行直接封装。可否将operator!=直接封装成python对象的__ne__()方法。

__ne__()是python对象内嵌的“不等”操作符函数。

如果是boost::python的话,应该可以直接这样做,不知道swig里可行不可行。

5楼:匿名用户

试试pypy~这个东西很新很强大~

如何实现 c/c++ 与 python 的通信

6楼:匿名用户

一般c/c++和python混合编程,问题分两种:

python调用c/c++

c/c++调用python

对于1,使用ctypes很容易。如果不想给c++库编写一套c接口,也可以使用swig来直接wrap到c++上。

对于2就比较麻烦。实际上你要做的是使用c++调用python的解释器,并且将c++的变量封装成pyobject之类的结构体作为参数传递给python接口。具体方法不了,自行google,有很多资料。

c/c++扩展python,采用**机制,怎么回传函数

7楼:吾不愿意放弃

属于混合编程来的问题。自较全面的介绍一下,不仅限于题主提出的问题。以下讨论中,python指它的标准实现,即cpython(虽然不是很严格)本文分4个部分c/c++调用python(基础篇)—仅讨论python官方提供的实现方式python调用c/c++(基础篇)—仅讨论python官方提供的实现方式c/c++调用python(高级篇)—使用cythonpython调用c/c++(高级篇)—使用swig练习本文中的例子,需要搭建python扩发环境。

具体细节见搭建python扩发环境-蛇之魅惑-知乎专栏1c/c++调用python(基础篇)python本身就是一个c库。你所看到的可执行体python只不过是个stub。真正的python实体在动态链接库里实现,在windows平台上,这个文件位于%systemroot%\system32\python27.

dll。