使用 C++ 成员的 Python ctypes

标签 python c++ ctypes

我正在尝试在 python 中使用 C++。所以我正在尝试将 c++ 成员与 python 一起使用。

有我的 try.cpp 文件..

extern "C"  int test(){
string a="Test!!";
int b = 5;} 

还有dll.py ..

from ctypes import cdll
import os
fullpath =  os.path.abspath('try.dll')
mydll = cdll.LoadLibrary(fullpath)
CALL = mydll.test() 

基本上,我只想使用 C++ 成员,例如 ;

CALL = mydll.test()
print CALL.a # Output : Test!!
print CALL.b # Output : 5 

有什么建议吗?我只想直接使用 C++ 成员,但我不确定是否可行......困惑

最佳答案

Python 的 C API 不直接支持 C++ 成员。要执行您提议的操作,需要在 SWIG 程序中为您实现一个 3 步流程。

  1. 创建一个指向实际上是 C++ 对象的 void* 指针的 python 引用,并通过 C api 公开它。
  2. 对于 C++ 类的每个成员/函数,创建一个暴露给 Python 的 C 函数,它使用 void * 指针并调用 (Object *)->function()
  3. 创建一个 python 类,其中包含对 C++ 对象的 python 引用,并且具有调用相应 C api 函数的方法和函数,这些函数又将它们的参数传递给 C++ 方法

    翻译:使用SWIG!

关于使用 C++ 成员的 Python ctypes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29539351/

相关文章:

python - 如何定义获取第一个元素的 python lambda?

Python:彩色打印和风格打印

python - 在 C++ 和 Python 代码之间转移控制

python - 使用 CDLL lib(或其他)在 Debian 64 位上使用 python 访问 32 位

python - Ctypes linux 行为在 py2 和 py3 上不同

python - 如何使一个方法只能被同一类的其他方法访问,而不是外部世界[在Python中]?

python - 如何从数据集中创建锚定正负对来训练模型?

c++ - 如何在linux上获取文件类型?

c++ - 在 C++ 中访问二维 BYTE 数组中的元素

c++ - 匹配 sprintf 的舍入行为