python内置库之学习ctypes库(二)
ctypes库踩坑日记2
- 一.自己实现一个dll文件,再用python的ctypes库调用思路1更清晰
- 二.生成dll文件
- 三.ctypes库调用
一.自己实现一个dll文件,再用python的ctypes库调用思路1更清晰
1.下载MinGW-w64
#下载地址https://sourceforge.net/projects/mingw-w64/
如果安装的是32位的gcc,默认编译的dll文件为32位的
如果安装的是64位的gcc,默认编译的dll文件为64位的(建议安装64位的)
安装的时候
Version选择当前支持的最高版本。
Architecture:由于我的是win10 64位,因此选择了x86_64。如果是32位电脑,需要选择i686。
Threads:这个世界上只有两种操作系统,符合 posix 协议的,和 Windows 。如果你想要开发 Windows 程序,需要选择 win32 ,
而开发 Linux、Unix、Mac OS 等其他操作系统下的程序,则需要选择 posix 。我只开发在 Windows 下运行的程序,所以选择了 win32 。
Exception:异常处理在开发中非常重要,你在开发的过程中,大部分的时间会耗在处理各种异常情况上。如果你之前选择了 64位,则这里有两个异常处理模型供你选择,
seh 是新发明的,而 sjlj 则是古老的。
seh 性能比较好,但不支持 32位。
sjlj 稳定性好,支持 32位。 我这里选择了 sjlj。
如果之前架构选择的是i686,则选项是 dwarf 和 sjlj 两种异常处理模型。同样的,dwarf 的性能要优于 sjlj ,他们都不支持 64位 。
Build revision:使用默认值。
在MinGW-w64/bin目录下运行cmd黑窗
常用gcc命令
#查看gcc版本信息
gcc -v
#生成64位的dll文件
gcc --shared -o test64.dll test.c
#生成32位的dll文件
gcc --shared -o test.dll test.c -m32
#生成可执行文件(.exe文件)
gcc test.c -o test
-shared: 表明产生共享库
-o:指定生成可执行文件的名称
-m32:生成32位的文件
最好配置到环境变量,方便后期使用
二.生成dll文件
新建test.c文件
添加以下内容
#include <stdio.h>int max(int num1, int num2);int main()
{/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0;
}
int max(int num1, int num2)
{/* 局部变量声明 */int result;if (num1 > num2)result = num1;elseresult = num2;return result;
}
使用命令gcc --shared -o test64.dll test.c
gcc --shared -o test.dll test.c -m32
生成32位的dll和64位的dll文件
三.ctypes库调用
用ctypes库去调用dll文件
import ctypes
import timedll=ctypes.WinDLL('./test.dll')
while True:res = dll.main()res1= dll.max(ctypes.c_int(2),ctypes.c_int(2))print("res", res)print("res1",res1)time.sleep(1)
用python64位解释器调用32位的dll文件报以下错误:
#[WinError 193] %1 不是有效的 Win32 应用程序!
应该调64位的dll文件才不会有报错
import ctypes
import timedll=ctypes.WinDLL('./test64.dll')
while True:res = dll.main()res1= dll.max(ctypes.c_int(2),ctypes.c_int(2))print("res", res)print("res1",res1)time.sleep(1)
python内置库之学习ctypes库(二)相关推荐
- python内置库之学习ctypes库(一)
ctypes库踩坑日记1 1.引言(这里是讲的windows下调用的方式) 2.结构体 3.联合体(共用体) 和上面结构体用法类似,只不过这里继承的是`Union`类 4.进阶用法 5.接受返回的值 ...
- python内置库之学习ctypes库(三)--调用Win32API
ctypes库踩坑日记3 1.调用win32的api 2.最好让结构体和程序分开 3.取完数据找到对应信息,创建code.py 4.创建main.py,代码这样看着就很简洁 1.调用win32的api ...
- python内置函数open_Python学习教程:Python内置函数大总结(下篇)
这里接着上次的 Python学习教程,给大家总结了Python 剩下的33个内置函数. 31 hash() 返回对象的哈希值 In [112]: hash(xiaoming)Out[112]: 613 ...
- python 内置函数 builtins_python学习笔记(七)——内置函数
builtins.py模块,是python的内建模块,在运行时会自动导入该模块.在该模块中定义了很多我们常用的内置函数,比如print,input 等. 在 builtins.py 模块中给出如下注释 ...
- python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...
Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...
- python内置函数系列之set(一)(持续更新)
python内置函数系列之set(一)(持续更新) 查看python中set介绍(ctrl + 鼠标左键): 有如下介绍: """set() -> new empt ...
- python内置库之学习configparser库(一)
python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...
- python内置标准库不可以处理的文件是_精华 | 140种Python标准库、第三方库和外部工具都有了...
原标题:精华 | 140种Python标准库.第三方库和外部工具都有了 作者 | 宋天龙 来源 | 大数据(ID:hzdashuju) [导读]Python数据工具箱涵盖从数据源到数据可视化的完整流程 ...
- random输出1到10之间_第43P,随机数,Python内置库之random
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第43篇文章,第二阶段的课程:Python基础知识:Python内置库之random随机库. 学习本课程,建议先看一遍:[计算机基础 ...
最新文章
- Oracle重建所有表和索引
- mysql数据放在什么位置,mysql数据存放的位置在哪
- Heritrix 3.1.0 源码解析(八)
- Kubernetes Pod入门指南
- php 检测 变量是否设置,php如何判断变量是否有设置的函数
- python模块大全doc_Python doc8包_程序模块 - PyPI - Python中文网
- windows 安装jenkins
- 游戏筑基开发之单链表及其增删改查(C语言)
- mysql远程连接error 1045_启用远程MySQL连接:错误1045(28000):用户被拒绝访问
- Java算法常见面试题及答案
- 一周信创舆情观察(12.7~12.13)
- Windows系统遇到不能打开要写入的文件怎么办?----重启电脑即可
- cad插入块_怎么才能将两张CAD图纸合并为一张?
- 阿弥陀佛么么哒 - 笔记
- iOS -- 开源项目和库
- 文件批量改名-bat操作
- 成功解决 -- flink.shaded.guava18.NumberFormatException: Not a version
- python开头声明中文_python开头——文件声明 详解
- 斯坦福大学开放课程:编程方法.02/第二课练习:karel 跳墙
- 写代码,心情很重要。一定要保持一个良好的心态,静下心来