文档声明:
以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正。并且该文档在后期会随着学习的深入不断补充完善。感谢各位的参考查看。
笔记资料仅供学习交流使用,转载请标明出处,谢谢配合。
如果存在相关知识点的遗漏,可以在评论区留言,看到后将在第一时间更新。
作者:Aliven888
1、环境
Python : V3.8.8 32bit
Visual Studio 2015 Win32 Debug
2、生成 C/C++ 动态链接库(dll)
C/C++ 动态链接库的生成可以参考《C/C++ 动态链接库(dll)的生成与调用》这篇文章。
//Testdll.h 文件
#pragma once
#include <iostream>
#include <string>
using namespace std;
#ifdef ALIVEN_DLL_EXPORT
#define ALIVEN_DLL_API extern "C" __declspec(dllexport)
#else
#define ALIVEN_DLL_API extern "C" __declspec(dllexport)
#endif
ALIVEN_DLL_API void AlivenPrint1();
ALIVEN_DLL_API void AlivenPrint2(int a, int b);
//Testdll.cpp 文件
# include "Testdll.h"
void AlivenPrint1()
{
cout << "@@ C++ Testdll" << endl;
return;
}
void AlivenPrint2(int a, int b)
{
cout << "@@ C++ Testdll " << a << " - " << b << endl;
return;
}
3、在 python 调用dll
# 先打印下yhon
print("@@ Python file")
# 调用 ctypes 库
from ctypes import * # * 表示导出所有 dll 导出的库
# 加载 C/C++ dll 库
aliven = CDLL("D:\VS2015\Project\Testdll\Debug\Testdll")
# 调用 C/C++ 库函数
aliven.AlivenPrint1() # 无参
a = 12
b = 23
aliven.AlivenPrint2(a, b) # 有参
Python 调用 C/C++ 动态链接库文件时,只需要一个 dll 文件即可(它是直接加载的动态链接库)。
执行 Python 脚本后的输出:
4、ctypes 介绍
模块 ctypes 是 Python 内建的用于调用动态链接库函数的功能模块,一定程度上可以用于 Python 与其他语言的混合编程。由于编写动态链接库,使用 C/C++ 是最常见的方式,故 ctypes 最常用于 Python 与 C/C++ 混合编程之中。
ctypes 的原理以及优缺点
- ctypes 有以下优点:
1、Python内建,不需要单独安装
2、可以直接调用二进制的动态链接库
3、在Python一侧,不需要了解Python内部的工作方式
4、在C/C++一侧,也不需要了解Python内部的工作方式
5、对基本类型的相互映射有良好的支持扫描二维码关注公众号,回复: 13132680 查看本文章![]()
- ctypes 有以下缺点:
1、平台兼容性差
2、不能够直接调用动态链接库中未经导出的函数或变量
3、对C++的支持差