【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

很多人说python的效率比较低,主要是没有分清什么时候用python、什么时候用c。对于网络、gui或者业务层面的代码,用python是完全可以的。但是对于算法、演算或者性能相关的逻辑,必须用c或者c++实现。因此回到windows平台,学会用python调用dll程序,是十分有必要的。用python调用dll不复杂,做好这几步就可以了,

1、创建一个dll工程

就按照vs2017的要求,“新建”-》“项目”-》“Visual C++”-》“Windows 桌面”-》“动态链接库”,一步一步创建工程即可

2、添加额外的函数代码

extern "C"
{_declspec (dllexport) int add(int a, int b){return  a + b;}_declspec (dllexport) int sub(int a, int b){return a - b;}
}

3、编译工程,检验是否生成dll文件

选择项目,右击,选择“重新生成解决方案”

4、开始编写python代码

import ctypes
lib=ctypes.cdll.LoadLibrary("Dll1.dll")

5、验证是否可以使用add函数、sub函数

print lib.add(1,2)
print lib.sub(1.2)

6、可以试试还没有实现的函数,会不会出现调用异常

比如print lib.mul(1,2)

7、继续测试,数据类型不一致是否发生异常

比如print lib.add(1.1, 2.2)

8、验证句柄信息是否正确

比如print lib

9、数据传递

目前python里面整数、字符串都是可以传递给c程序的

如果是复杂一点的数据结构,建议直接用字符串组装传递进去,c程序收到后用sscanf解析

反过来,如果c的结果传给python,一般函数的返回值可以传递出来的,因此是字符串的话,可以通过多次调用函数获取返回值的方法来解决

10、其他

如果是发布给客户的应用程序,最好是用pyinstaller封装下,再加上必要的资源文件、dll文件、config配置文件,这样就可以了

注1:

如果c和python之间只是简单的数据传输,那么整数和字符串就可以了

一旦不是简单的数据,那么最好使用python原生的api,这样处理的效率更高点

注2:

注意使用ctypes库

https://docs.python.org/zh-cn/3.7/library/ctypes.html

python编程(python调用dll程序)相关推荐

  1. Python 编程无师自通:专业程序员的养成

    Python 编程无师自通:专业程序员的养成 扫码 · 试读 在学习中拉开技术差距

  2. Python——Python编程方法与应用——程序示例

    Python--Python编程方法与应用--程序示例 例1-1 根据圆的半径计算圆的周长和面积 #ex0101.py # 计算圆形的面积和周长 r = 3.2 area = 3.14*r*r per ...

  3. C/C++:Windows编程—调用DLL程序的2种方法

    前言 先简单介绍下DLL.DLL:Dynamic Link Library 动态链接库 是一个被其他应用程序调用的程序模块,其中封装了可以被调用的资源或函数.DLL 文件属于可执行文件,它符合Wind ...

  4. GUI的演化和python编程——Python学习笔记之二十二

    GUI的演化和python编程--Python学习笔记之二十二 写完了有关长寿的两篇博文,本该去完成哥德尔那个命题六的.对计算机图形界面的好奇,让我把注意力暂时离开那个高度抽象难读的哥德尔,给转到计算 ...

  5. 非线性规划的拉格朗日乘子法python编程python包编程

    非线性规划的拉格朗日乘子法&python编程&python包编程 一.拉格朗日乘子法 1.1 拉格朗日乘子法定义 1.2 KKT条件定义 1.3 拉格朗日乘子法手工推导例题 二.Pyt ...

  6. python编程在哪里写程序-教你如何编写、保存与运行Python程序的方法

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...

  7. 了解Python编程——Python学习(一)

    目录 一.对Python程序的了解 二.认识Python家族 三.Python的数据类型组成 四.程序中出现率最高的if-else 一.对Python程序的了解 Python是什么 Python,与C ...

  8. 孩子有必要学python编程,python编程小学生学好吗

    孩子学python有用吗 山东省在其最新出版的小学信息技术六年级教材中,加入了 Python 的内容,小学生都开始学 Python ,后生可畏. 浙江省新高中信息技术教材改革项目中,高中新生开始使用新 ...

  9. 怎样学好python编程-Python编程怎么学习好?老男孩Python入门

    怎么学习Python编程呢?Python是一门计算机编程语言,同时也是一门入行IT行业的首先语言,学习一门新技术最重要的就是去掌握学习方法,对于Python学习来说,对于新手来说相对于是非常简单的,而 ...

最新文章

  1. php播放音乐视频,html5停止(暂停)当前播放的音频或视频的方法pause()
  2. SQL与NoSQL区别
  3. 一些SqlServer常见和入门操作2
  4. Algs4-1.4.8计算输入文件中相等的整数对的数量
  5. C++网络编程快速入门(一):TCP网络通信基本流程以及基础函数使用
  6. 网页字体设置你了解吗?
  7. python实现录音小程序 界面_小程序如何实现录音 播放功能
  8. linux中查看和开放端口
  9. rmd文件怎么转换html文件,如何将Rmd文件的html输出向左对齐
  10. 小程序模仿蚂蚁森林浇水demo,树木浇水
  11. vue 强制清除浏览器缓存
  12. L2 Switching
  13. 微信小程登录功能和获取手机号
  14. 删除flash助手推荐广告
  15. Origin中画折线图实现双X轴和双Y轴(双坐标轴)
  16. 如何在电脑中安装虚拟机?
  17. JFreeChart饼图, java程序中加载宋体字库
  18. latex—中文目录乱码
  19. 主机坏了,150能解决的问题我花了近8000
  20. 电子计算机是汉字的掘墓人,当人类社会进入到信息时代,曾有人_______,计算机是方块汉字的掘墓人。然 - 问答库...

热门文章

  1. Heartbeat(v1、v2、pacemaker)集群组件概述
  2. oracle 11g 存储结构和数据文件
  3. Logstash+elasticsearch+elastic+nignx
  4. KETTLE6.0版本体验小结
  5. php之防注入程序绕过浅谈
  6. nginx多域名设置和多子目录实现共用一端口
  7. mac ipmessage
  8. struct、union、enum and sizeof
  9. Android开发2:事件处理及实现简单的对话框(Toast,AlertDialog,Snackbar,TextInputLayout的使用)...
  10. Appium+Python API相关知识了解