Python调用C++编写的动态链接库.dll文件

1、介绍

Python作为一个开发效率高的脚本语言,在开发商比较有效率。而底层库大都是C++编写的,效率高。因此开发的时候遇到对效率要求高的时候采用C++编写库。这就需要封装一个接口给Python脚本去调用。

2、代码

直接上代码吧。编译器用的是VS2017


image.png

选择DLL文件,确定之后删掉预编译头那些东西。选择环境为x64。

image.png

image.png

image.png

环境要选对,因为64位的Python调用不了x86环境编写的DLL(32位)。

DllTest.h

#pragma once
#include 
class DllTest {
    double a;
    double b;

public:
    void SetParam(double _a, double _b);
    void DisplayParam();
    int AddParam();
};

DllTest.cpp

#include "DllTest.h"

void DllTest::SetParam(double _a, double _b)
{
    a = _a;
    b = _b;
}

void DllTest::DisplayParam()
{
    std::cout << "a = " << a << ", b = " << b << std::endl;
}

int DllTest::AddParam()
{
    return static_cast(a + b);
}

dllmain.cpp

#include "DllTest.h"

extern "C" {
    DllTest d;

    __declspec(dllexport) void Set(double _a, double _b)
    {
        d.SetParam(_a, _b);
    }

    __declspec(dllexport) void Print()
    {
        d.DisplayParam();
    }

    __declspec(dllexport) int Add()
    {
        return d.AddParam();
    }
}

直接生成,在目标路径下就会生成一个Dll1.dll文件,将这个文件复制到Python脚本的目录下。


image.png
image.png

Python代码如下:
test.py

import ctypes

# 加载动态链接库
cpp = ctypes.cdll.LoadLibrary("Dll1.dll")
# 设置Set函数的形参类型
cpp.Set.argtypes = [ctypes.c_double, ctypes.c_double]
# 设置Add函数的返回值类型
cpp.Add.restype = ctypes.c_int
# 调用Set,Print和Add函数
cpp.Set(1.0, 2.0)
cpp.Print()
print(cpp.Add())

输出结果为:


image.png

这样便可以成功调用C++编写的动态链接库了。

结语

闲暇记录一下代码,方便自己回看,如果能帮到你就更好了。

你可能感兴趣的:(Python调用C++编写的动态链接库.dll文件)