在 Python 中使用 C++ DLL

Using C++ DLLs in Python

如果这个问题在这里重复了很多次,我很抱歉,但我花了一整天都没有找到明确的答案。

我在 Visual Studio 2010 下工作,我正在尝试将 DLL 中定义的 class 加载到 Python 中。我看到如果不制作 C++ 包装器(最终使用 SWIG 或 Boost.Python)就无法做到这一点。我不是 C++ 程序员,我找不到一个简单明了的入门教程,如果你能给我一个简单的教程,我将不胜感激。

此外,我的 class 使用单例模式将其实例化限制为一个对象,如下所示:

MyClass*    MyClass::getInstance()
{
    if(instance==NULL)                  
        instance    =   new MyClass();      

    return instance;
}

所以我需要知道如何在我的 Python 脚本中处理这个问题,以便我可以创建 MyClass 的实例并访问它的所有方法。

谢谢大家。

找到问题的解决方案后,我回来回答我的问题,可能对谁有帮助。

我使用 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.pyMyClass_wrap.cxx.

然后我在 Visual Studio 中将 MyClass_wrap.cxx 文件包含到我的项目中,并对我的项目属性进行了这些更改:

配置属性 > 常规 > 目标名称:_MyClass 目标扩展:.pyd

C/C++ > 常规 > 附加包含目录:/path/to/Python/include

链接器 > 附加库目录://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() 返回的引用。