从c++函数中获取输出到python对象中
ctypes - get output from c++ function into python object
我遵循了这里给出的第二个答案中的示例代码-从python调用C/c++ ?
,并设法让它接受一个字符串参数。
这是我修改的cpp文件:
#include <iostream>
using namespace std;
class Foo{
public:
char* bar(char in[1000]){
std::cout << "Hello" << std::endl;
std::cout << in << std::endl;
return in;
}
};
extern "C" {
Foo* Foo_new(){ return new Foo(); }
char* Foo_bar(Foo* foo, char in[1000]){ return foo->bar(in); }
}
然后我的python函数是这样的-
from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
class Foo(object):
def __init__(self):
self.obj = lib.Foo_new()
def bar(self, st):
lib.Foo_bar(self.obj, st)
f = Foo()
a = f.bar('fd')
将"Hello"answers"fd"打印到屏幕上,但是当我查看a时,它是空的。如何修改这段代码,以便将结果输入到python对象a中?
编辑:基于我在这里指出的另一个问题,如何处理c++返回类型std::vector
我试了如下:
from ctypes import *
lib.Foo_bar.restype = c_char_p
a=lib.Foo_bar('fff')
这给出了一个'x87x7f'
a = lib.Foo_bar('aaa')
这给出了一个'x87x7f'
所以,相同的,尽管参数不同。我遗漏了什么?
@Paul Mu Guire上面的建议可能有所帮助,但我需要的是一些非常简单的东西,即接受字符串并输出字符串。所以,整个面向对象的范例是多余的。我改成了一个简单的C结构-
extern "C" {
char* linked(char * in){
return in;
}
}
并且在执行lib.linked.restype = c_char_p.
相关文章:
- Pybind11:使用 for 循环使用 OpenMP 访问 python 对象
- 从从该抽象类派生的 Python 对象强制转换C++抽象类C++
- 如何创建和使用存储为 c++ 对象的 python 对象?
- 在C++中运行 python 对象
- 如何将 Python 对象转换为 Cython 扩展类型的 std::vector 并返回?
- 在 boost::p ython 中的 python 对象中运行 python 代码
- 添加 swig pythoncode 以在 Python 对象上设置自己的标志
- C DLL中的Python对象
- Boost.Python 返回引用现有 c++ 对象的 python 对象
- 如何使用CTYPE将此Python对象移至C
- 如何使用 boost::p ython 创建和使用 Python 对象的实例
- 如何在Cython中将Python对象转换为C++类型
- Python 对象不可迭代或下标
- 从C 内部在本地范围中创建Python对象
- 将大型python对象存储在RAM中以备将来使用
- 在C++中使用Python对象
- Python 对象删除检测
- 将 python 对象传递到用 Cython 包装的类时出现 Seg 错误
- 提高python对象的生存期
- Boost::Python Boost:的正向声明:Python::对象抛出Python TypeError