对不起,如果这个问题在这里重复多次,但我花了一整天没有找到明确的答案。
我在Visual Studio 2010下工作,并且我试图将DLL中定义的类加载到Python中。我看到没有制作C ++包装器(最终使用SWIG或Boost.Python)就无法做到这一点。我不是C ++程序员,我无法找到一个简单明了的教程,如果你能给我一个简单的教程,我将不胜感激。
此外,我的类使用单例模式将其实例化限制为一个对象,如下所示:
MyClass* MyClass::getInstance()
{
if(instance==NULL)
instance = new MyClass();
return instance;
}
所以我需要知道如何在我的Python脚本中处理这个问题,这样我就可以创建一个MyClass实例并访问它的所有方法。
谢谢你们。
答案 0 :(得分:0)
在找到解决问题的方法后,我回过头来回答我的问题。
我使用SWIG制作C ++包装器。所以我定义了模块接口:
%module MyClass
%{
#include "MyClass.h"
%}
%include <windows.i> //if you're using __declspec(dllexport) to export dll
%include "MyClass.h"
然后用:
直接编译 >swig -c++ -python MyClass.i
这会生成两个文件: MyClass.py 和 MyClass_wrap.cxx 。
然后我将MyClass_wrap.cxx文件包含在Visual Studio中的项目中,并对我的项目属性进行了这些更改:
配置属性&gt;一般&gt;目标名称: _MyClass 目标扩展: .pyd
C / C ++&gt;一般&gt;其他包含目录: / path / to / Python / include
链接器&gt;其他库目录: // path / to / Python / libs
然后编译项目以生成 _MyClass.pyd 。
在我的Python脚本中,它简单如下:
import MyClass
instance = MyClass.MyClass.getInstance()
#and then use all MyClass methods via instance, ex: instance.SomeMethod()
这就是全部。 SWIG完成了处理getInstance()返回的引用的所有工作。