参考链接https://www.cnblogs.com/TQCAI/p/8881530.html

https://www.jb51.net/article/52513.htm

https://www.cnblogs.com/pyse/p/8590829.html

windows安装MinGW-w64教程https://www.cnblogs.com/ggg-327931457/p/9694516.html


公司业务需要,让我用python调用领导写好的dll库,经过一段时间的研究,终于调用成功,特此来记录一下过程

开发环境win10+python3.6.8(64位)


1.安装MinGW-w64

安装这个的目的是生成dll文件用,参考地址在上面,讲一下注意的点。

  1. 安装的时候version选择最新的即可。
  2. 安装目录随便选,不是C盘也可以.
  3. 在这一步下载的时候,大概是20分钟左右,如果觉得慢的话,可以直接去下载源码然后解压即可,参考文章里的八、问题列表里有说明
  4. 安装好记得在命令行里面验证一下是否正确安装

2.编写文件生成dll

#include <stdio.h>

extern "C" {
__declspec(dllexport) int Double(int x);
__declspec(dllexport) float floatAdd(float a,float b);
__declspec(dllexport) void HelloWorld(char * str);
__declspec(dllexport) void Ints(int * arr,int n);
} int Double(int x){
return x*;
} float floatAdd(float a,float b) {
return a+b;
} void HelloWorld(char * str){
puts(str);
} void Ints(int * arr,int n){
for(int i=;i<n;i++){
printf("%d ",arr[i]);
}
puts("");
}

生成dll

g++ dlltest.cpp -shared -o dlltest.dll

3.python调用dll

from ctypes import *

dll = windll.LoadLibrary('E:\code\lx_code\dlltest.dll')

print(dll)

a=dll.Double(123)
print(type(a))
print(a)

输出内容

<WinDLL 'E:\code\lx_code\dlltest.dll', handle 6c100000 at 0x27f2ab8bc88>
<class 'int'>
246

到这里,就算调用成功了。

4.可能会遇到的问题

ctypes库加载dll有好几种方式,你可以自己尝试一下用哪一种方式,参考网址https://www.cnblogs.com/baihuitestsoftware/articles/5345089.html

stdcall调用约定:两种加载方式

Objdll = ctypes.windll.LoadLibrary("dllpath")
Objdll = ctypes.WinDLL("dllpath")

cdecl调用约定:也有两种加载方式

Objdll = ctypes.cdll.LoadLibrary("dllpath")
Objdll = ctypes.CDLL("dllpath")
# 其实windll和cdll分别是WinDLL类和CDll类的对象。

python调用dll详解的更多相关文章

  1. 【VB技巧】VB静态调用与动态调用dll详解

    本文“[VB技巧]VB静态调用与动态调用dll详解”,来自:Nuclear'Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=489,转载请注明作者及出处! [[请注意]]:在以下 ...

  2. Python调用windows下DLL详解

    Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...

  3. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

  4. Python包模块化调用方式详解

    Python包模块化调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般来说,编程语言中,库.包.模块是同一种概念,是代码组织方式. Python中只有一种模块对象类型 ...

  5. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  6. Python中dict详解

    from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...

  7. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  8. Python之print详解

    Python之print详解 http://www.jb51.net/article/55768.htm   print的一些基本用法,在前面的讲述中也涉及一些,本讲是在复习的基础上,尽量再多点内容. ...

  9. Python字符编码详解,str,bytes

    什么是明文 “明文”是可以是文本,音乐,可以编码成mp3文件.明文可以是图像的,可以编码为gif.png或jpg文件.明文是电影的,可以编码成wmv文件.不一而足. 什么是编码?把明文变成计算机语言 ...

随机推荐

  1. LeetCode_Bit Manipulation

    231. Power of Two Given an integer, write a function to determine if it is a power of two. class Sol ...

  2. linux学习:【第4篇】之nginx

    一.知识点回顾 临时:关闭当前正在运行的 /etc/init.d/iptables stop 永久:关闭开机自启动 chkonfig iptables off ll /var/log/secure # ...

  3. 【C#-去空格】去掉字符串后空字符串\0\0\0\0\0\0

    使用  变量.Replace(@“\0”,"") string str="abcde\0\0\0\0\0\0"; str=str.Replace(@" ...

  4. 32.把数组排成最小的数(python)

    题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. # -*- ...

  5. 面试题Redis最常被问到知识点总结

    1.什么是redis? redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发.高扩展,大数据存储等一系列的问题而产生的数据库 ...

  6. 盒子模型的overflow属性,border属性,padding与margin属性

    今天要写的是CSS布局—盒子模型 首先说一下CSS的整体布局: 它包括容器(container),页眉(header),导航条(navbar),页面主要内容(main),菜单(menu),主要内容(c ...

  7. Socket 对象(内建)方法

    函数 描述 服务器端套接字 s.bind() 绑定地址(host,port)到套接字, 在AF_INET下,以元组(host,port)的形式表示地址. s.listen() 开始TCP监听.back ...

  8. 如何将 GitHub 中的项目导入到 stackblitz.com 中

    如何将一个 GitHub 中的项目导入到 stackblitz.com 中,然后开始编辑和编译呢? 例如,我们有一个项目在 GitHub 中的地址为:https://github.com/cwiki- ...

  9. TTTTTTTTTTTTT poj 3057 Evacuation 二分图匹配+bfs

    题意:见挑战230页 #include <iostream> #include <cstdio> #include <cstring> #include <c ...

  10. AHOI/HNOI2017 礼物

    题目链接:戳我 对于题目中给的式子:(大家暂且把\(y_i\)当作\(y_{i+k}\)来看啦qwq) \(\sum_{i=1}^{n}(x_i-(y_i+c))^2\) \(=\sum_{i=1}^ ...