基础部分请参考dalao写的这篇博客,本篇博客主要学习各类数据的交互。

普通数据

主要指的是intfloatchar之类的,举个例子:
在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平台相关推荐

  1. 三维交互可视化平台(智慧海上牧场平台)学习开发Flask+Vue+Echarts+Mysql+websocket 实战(四)

    前言 三维交互可视化平台(智慧海上牧场平台)学习开发之Vue(一) 三维交互可视化平台(智慧海上牧场平台)学习开发之Flask+Vue+Mysql(二) 三维交互可视化平台(智慧海上牧场平台)学习开发 ...

  2. java-net-php-python-ssm大学生交互自助平台查重PPT计算机毕业设计程序

    java-net-php-python-ssm大学生交互自助平台查重PPT计算机毕业设计程序 java-net-php-python-ssm大学生交互自助平台查重PPT计算机毕业设计程序 本源码技术栈 ...

  3. Python与用户的交互 ,格式化输出的三种方式

    目录 Python与用户的交互 1.为什么交互? 格式化输出的三种方式 1.占位符 format格式化 f-String格式化 基本运算符 流程控制之if判断 1.语法 1.1 if 1.2 if.. ...

  4. Python与MySQL的交互

    Python与MySQL的交互 1 .安装mysql模块 pip3 install pymysql 2 .connection 对象 用于建立与数据库的连接 2.1  创建对象 conn = conn ...

  5. linux 移除python_第16 p,PYthon中的用户交互,Python GUI编程

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第16篇文章,第二阶段的课程:Python基础知识:PYthon中的用户交互.Python GUI编程实现方式介绍. 学习本课程,建 ...

  6. win10 平台VS2019最简安装实现C++/C开发

    这两天一直在安装vs2015,总是卡在visual studio 2015 出现安装包丢失或损坏的现象,尽管按照网上很多方法尝试解决,但是一直不行.算了.还是使用最新版的VS 2019安装,没想到很顺 ...

  7. python和c++无缝对接_总结:Python学习 和 Python与C/C++交互

    本篇仅仅是Python的学习和Python和C++数据对接过程中的一些总结. 由于工作的需要,用一周的时间学习 Python. Python是基于C实现的一门解释型语言,由于其易用性,俘获了不少开发者 ...

  8. python文件打开的合法方式-用python与文件进行交互的方法

    本文介绍了用python与文件进行交互的方法,分享给大家,具体如下: 一.文件处理 1.介绍 计算机系统:计算机硬件,操作系统,应用程序 应用程序无法直接操作硬件,通过操作系统来操作文件,进而读/写硬 ...

  9. 基于 Win10 平台 搭建 Elasticsearch 集群

    基于 Win10 平台搭建 Elasticsearch 集群 1. 基本概念 1.1 单机和集群 1.2 节点 2. 部署集群 3. 启动集群 4. 测试集群 1. 基本概念 1.1 单机和集群 ✨单 ...

最新文章

  1. 北京智源人工智能研究院关于征集2019年度智源青年科学家的通知
  2. 数据集干货:一文读懂Mapsidejoin
  3. CentOS中升级openssl与卸载重装以及提示:error while loading shared libraries: libssl.so.1.1: cannot open shared ob
  4. SAP Gateway类型为multipart mixed的请求处理逻辑
  5. 注册表和计算机用户名关系,IUSR_计算机名和IWAM_计算机名帐户的用户名和密码...
  6. 索要ValidateTextBox控件Source Code的朋友rickel****@gmail.com,邮件退回了。各位,与我通信,请不要使用GMAIL,烦。...
  7. angular 上传图像的使用总结
  8. ms sql server 系统表详细说明
  9. 2.5维数字地图制作
  10. 阿里云的yum源配置
  11. 缺少计算机所需的介质驱动程序6,缺少计算机所需的介质驱动程序解决办法
  12. 从家庭主妇到格力老总,董明珠的大女主逆袭之路
  13. c 语言小游戏坦克大战,C++实现坦克大战小游戏EGE图形界面
  14. 基于华为云轻松搭建属于自己的网站 (Linux,Apache,MySQL,PHP)
  15. imageJ把两张图片在时间轴上进行合并
  16. 品牌方如何筛选高性价比商业UP主?拆解影响B站up主广告报价的因素
  17. 访谈:腾讯高级交互设计师C7210的十年设计路(上)
  18. day13-面向对象进阶
  19. 滑动窗口切割图片并重定位标注框
  20. 期刊论文发表的格式要求是什么

热门文章

  1. 牛客寒假算法基础训练营3
  2. pytorch学习笔记(三):线性回归
  3. nlp-tutorial代码注释3-2,LSTM简介
  4. 目标检测——YOLOV3的学习笔记
  5. 算法优化——位运算的优化技巧
  6. An error occured executing the microsoft VC++ runtime installer
  7. 给你出道题---如何蒙题
  8. 所谓伊人,在水一方--------------折射定律
  9. Java中常见RuntimeException与其他异常表及Exception逻辑关系详解
  10. 树莓派入门教程 - 0 - 准备篇 - 0.2 树莓派SSH远程登陆,VNC远程桌面