我正在尝试在我的python应用程序中使用C ++库。我可以在python中加载dll但是找不到任何关于如何在c ++ dll中创建类的实例并在该onject上调用方法的解决方案。
以下是我所做和想要的事情
My.dll中的C ++代码
class MyClass
{
public:
MyMethod(int param);
}
Python代码
from ctypes import *
myDll = windll.LoadLibrary("My.dll")
我想执行以下操作
myClassInstance = myDll.InstantiateMyClass()
myClassInstance.MyMethod(5)
答案 0 :(得分:4)
虽然可能可以使用ctypes,但它肯定不会那么简单。它会更容易使用,例如Boost.Python或Cython创建一个适当的CPython扩展,将该类公开为Python类型。
答案 1 :(得分:2)
使用Ctypes加载C ++ dll是危险的,并且有一些强大的局限性。导出的函数名称与您声明的函数名称不同,除非您在C ++中将函数声明为'extern“C”'。这仅适用于纯函数,不适用于成员函数。 C ++编译器执行称为“名称修改”的操作,请参阅http://en.wikipedia.org/wiki/Name_mangling#Name_mangling_in_C.2B.2B。
我建议两种解决方案:
附加说明:
我尝试过一段时间来提升python,但发现它很难使用。它有自己的构建系统,你必须学习,编译过程非常慢,并且由于模板语法,代码难以阅读。事实上,boost python背后的背景非常酷,但在我看来它很难使用。
我也尝试了SIP和SWIG,我感觉不太舒服。
我真的建议使用Cython。