Python与C++动态链接库交互 win10平台
基础部分请参考dalao写的这篇博客,本篇博客主要学习各类数据的交互。
普通数据
主要指的是int
、float
和char
之类的,举个例子:
在python文件中
import ctypeslib = ctypes.cdll.LoadLibrary("D:/360MoveData/Users/Erick/Desktop/Dll/x64/Debug/Dll.dll")
print(lib.func(ctypes.c_int(10)))
在DLL.cpp中复制下面的文件:
// Dll.cpp : Defines the exported functions for the DLL application.
//#include "stdafx.h"// Dll2.cpp: 定义 DLL 应用程序的导出函数。
#define EXPORT __declspec(dllexport)#include<iostream>
using namespace std;extern "C" {EXPORT double func(int x) {cout << "Get arg: " << x << endl;return 3.14;}
}
为了保证精度,都使用double
类型的数据。编译完成后,执行python文件,即可输出:
Get arg: 10
3.14
数组类型的数据
传入数组
向C语言函数传递数组数据:
import ctypeslib = ctypes.cdll.LoadLibrary("D:/360MoveData/Users/Erick/Desktop/Dll/x64/Debug/Dll.dll")INPUT = ctypes.c_int * 9 # 相当于声明了长度为9的数据
input = INPUT()ls = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]t = 0
for i in range(3):for j in range(3):input[t] = ls[i][j]t += 1lib.read(input)
在C语言函数中:
#include "stdafx.h"// Dll2.cpp: 定义 DLL 应用程序的导出函数。
#define EXPORT __declspec(dllexport)#include<iostream>
using namespace std;extern "C" {EXPORT void read(int* arr) {for (int i = 0; i < 9; ++i) {cout << arr[i] << " ";}cout << endl;}
}
传出结构体、数组
C语言不能直接向Python返回数组,需要借助结构体进行实现,先看python代码:
import ctypeslib = ctypes.cdll.LoadLibrary("D:/360MoveData/Users/Erick/Desktop/Dll/x64/Debug/Dll.dll")class MyStruct(ctypes.Structure):_fields_ = [("name", ctypes.c_char * 10),("score", ctypes.c_double),("number", ctypes.c_int * 4)]lib.foo.restype = ctypes.POINTER(MyStruct)
p = lib.foo()print(p.contents.name)
print(p.contents.score)
ls = p.contents.number
for i in ls:print(i)
注意两个地方,必须要继承ctype.Structure
,同时所有的结构必须是在_fields
这个域中,同时需要包括名字,因为后期需要使用名字进行索引。获取值的时候,在contents
这个域中获取。
再来看C++的代码:
// Dll.cpp : Defines the exported functions for the DLL application.
//#include "stdafx.h"
#include <stdint.h>// Dll2.cpp: 定义 DLL 应用程序的导出函数。
#define EXPORT __declspec(dllexport)#include<iostream>
using namespace std;struct MyStructure {char name[10];double score;int number[4];
};extern "C" {EXPORT MyStructure* foo() {auto p = new MyStructure;p->name[0] = 'T';p->name[1] = 'o';p->name[2] = 'm';p->name[3] = '\0';p->score = 98.383;p->number[0] = 1;p->number[1] = 0;p->number[2] = 0;p->number[3] = 1;return p;}
}
Python与C++动态链接库交互 win10平台相关推荐
- 三维交互可视化平台(智慧海上牧场平台)学习开发Flask+Vue+Echarts+Mysql+websocket 实战(四)
前言 三维交互可视化平台(智慧海上牧场平台)学习开发之Vue(一) 三维交互可视化平台(智慧海上牧场平台)学习开发之Flask+Vue+Mysql(二) 三维交互可视化平台(智慧海上牧场平台)学习开发 ...
- java-net-php-python-ssm大学生交互自助平台查重PPT计算机毕业设计程序
java-net-php-python-ssm大学生交互自助平台查重PPT计算机毕业设计程序 java-net-php-python-ssm大学生交互自助平台查重PPT计算机毕业设计程序 本源码技术栈 ...
- Python与用户的交互 ,格式化输出的三种方式
目录 Python与用户的交互 1.为什么交互? 格式化输出的三种方式 1.占位符 format格式化 f-String格式化 基本运算符 流程控制之if判断 1.语法 1.1 if 1.2 if.. ...
- Python与MySQL的交互
Python与MySQL的交互 1 .安装mysql模块 pip3 install pymysql 2 .connection 对象 用于建立与数据库的连接 2.1 创建对象 conn = conn ...
- linux 移除python_第16 p,PYthon中的用户交互,Python GUI编程
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第16篇文章,第二阶段的课程:Python基础知识:PYthon中的用户交互.Python GUI编程实现方式介绍. 学习本课程,建 ...
- win10 平台VS2019最简安装实现C++/C开发
这两天一直在安装vs2015,总是卡在visual studio 2015 出现安装包丢失或损坏的现象,尽管按照网上很多方法尝试解决,但是一直不行.算了.还是使用最新版的VS 2019安装,没想到很顺 ...
- python和c++无缝对接_总结:Python学习 和 Python与C/C++交互
本篇仅仅是Python的学习和Python和C++数据对接过程中的一些总结. 由于工作的需要,用一周的时间学习 Python. Python是基于C实现的一门解释型语言,由于其易用性,俘获了不少开发者 ...
- python文件打开的合法方式-用python与文件进行交互的方法
本文介绍了用python与文件进行交互的方法,分享给大家,具体如下: 一.文件处理 1.介绍 计算机系统:计算机硬件,操作系统,应用程序 应用程序无法直接操作硬件,通过操作系统来操作文件,进而读/写硬 ...
- 基于 Win10 平台 搭建 Elasticsearch 集群
基于 Win10 平台搭建 Elasticsearch 集群 1. 基本概念 1.1 单机和集群 1.2 节点 2. 部署集群 3. 启动集群 4. 测试集群 1. 基本概念 1.1 单机和集群 ✨单 ...
最新文章
- 北京智源人工智能研究院关于征集2019年度智源青年科学家的通知
- 数据集干货:一文读懂Mapsidejoin
- CentOS中升级openssl与卸载重装以及提示:error while loading shared libraries: libssl.so.1.1: cannot open shared ob
- SAP Gateway类型为multipart mixed的请求处理逻辑
- 注册表和计算机用户名关系,IUSR_计算机名和IWAM_计算机名帐户的用户名和密码...
- 索要ValidateTextBox控件Source Code的朋友rickel****@gmail.com,邮件退回了。各位,与我通信,请不要使用GMAIL,烦。...
- angular 上传图像的使用总结
- ms sql server 系统表详细说明
- 2.5维数字地图制作
- 阿里云的yum源配置
- 缺少计算机所需的介质驱动程序6,缺少计算机所需的介质驱动程序解决办法
- 从家庭主妇到格力老总,董明珠的大女主逆袭之路
- c 语言小游戏坦克大战,C++实现坦克大战小游戏EGE图形界面
- 基于华为云轻松搭建属于自己的网站 (Linux,Apache,MySQL,PHP)
- imageJ把两张图片在时间轴上进行合并
- 品牌方如何筛选高性价比商业UP主?拆解影响B站up主广告报价的因素
- 访谈:腾讯高级交互设计师C7210的十年设计路(上)
- day13-面向对象进阶
- 滑动窗口切割图片并重定位标注框
- 期刊论文发表的格式要求是什么
热门文章
- 牛客寒假算法基础训练营3
- pytorch学习笔记(三):线性回归
- nlp-tutorial代码注释3-2,LSTM简介
- 目标检测——YOLOV3的学习笔记
- 算法优化——位运算的优化技巧
- An error occured executing the microsoft VC++ runtime installer
- 给你出道题---如何蒙题
- 所谓伊人,在水一方--------------折射定律
- Java中常见RuntimeException与其他异常表及Exception逻辑关系详解
- 树莓派入门教程 - 0 - 准备篇 - 0.2 树莓派SSH远程登陆,VNC远程桌面