1 创建C++工程生成dll库

 

 

 

 

 

 

 

 

 编译生成

 

 

2pythoN调用dll库

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#!/bin/env python

# -*- coding: utf-8 -*-

 

import ctypes

 

 

#获取路径

import os

#pathnow=os.getcwd() #获取当前路径

pathnow=os.path.abspath('ConsoleApplication1.dll') #获取指定文件名字的全路径

pathnow=pathnow.replace('\\','/')  #路径替换

#print(pathnow)

 

#调用库

#lib_add= ctypes.cdll.LoadLibrary(pathnow)

lib_add= ctypes.cdll.LoadLibrary('./ConsoleApplication1.dll')

 

print (lib_add.add(1,3))

  

命令行进入工程目录,运行

python .\python.py

 

 

例程2 封装成类调用+参数修改

C++打包库

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

#include <iostream>

 

using namespace std;

 

//-------------------C++函数定义---------------------

class TestLib {

private:

    int number = 0;

 

public:

    void set_number(int num) {

        number = num;

    }

    int get_number() {

        return number;

    }

};

 

 

//-------------------C++函数打包成C接口---------------------

extern "C" {

    TestLib obj;

    extern "C" _declspec(dllexport) int get_number() {

        return obj.get_number();

    }

    extern "C" _declspec(dllexport) void set_number(int num) {

        obj.set_number(num);

    }

}

  

 

python调用库

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#!/bin/env python

# -*- coding: utf-8 -*-

 

import ctypes

 

 

#获取当前路径

import os

#pathnow=os.getcwd() #获取当前路径

pathnow=os.path.abspath('ConsoleApplication1.dll'#获取指定文件名字的全路径

pathnow=pathnow.replace('\\','/')  #路径替换

#print(pathnow)

 

#调用库

#linux下调用so

#lib = ctypes.cdll.LoadLibrary("./libpycallclass.so")

#win10下调用dll

lib= ctypes.cdll.LoadLibrary('./ConsoleApplication1.dll')

 

 

 

print(lib.get_number()) #0

lib.set_number(10)

print(lib.get_number())   #10

  

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐