python使用ctypes调用C编译dll函数方法

Python020

python使用ctypes调用C编译dll函数方法,第1张

函数声明加入前缀,如

__declspec(dllexport) int Fun(int a, int b)

否则在加载该dll时会提示找不到该符号

在windows下可以通过vs自带的dumpbin工具查看可被调用符号

dumpbin /exports test.dll

C函数在调用过程中关于参数传递和压栈由多种规定,作为dll提供给其他程序调用时,必须明确并统一为同一种调用规定,否则会导致栈破坏,编译器负责具体实现调用规定,主要有以下几种调用规定

python下调用C库有多种方式,ctypes是其中一种比较方便的,调用时首先需要加载dll文件,根据C dll的调用规定不同需要使用不同接口,使用ctypes需要 import ctypes 库

对于简单的C函数,例如 int add(int a, int b) , 此时就可以直接调用了,如

对于较复杂的C函数的参数情况,ctypes调用时对入参和出餐做一定处理,这里分情况讨论

以上包含了几种主要的参数传递情况,ctypes也提供了一个较为完整的python类型和C类型的对照,如下:

1、说明

编译python程序就是把python脚本转换成操作系统中的可执行文件,一般使用pyinstaller来完成。

2、步骤

(1)安装pyinstaller

使用pip install pyinstaller命令来安装

(2)编译脚本

python安装目录scriptpyinstaller 脚本文件名

(3)完成

执行脚本后就可以在脚本目录生成dist目录,目录就有打包好的可执行文件

3、备注

pyinstaller参数

-w指令

直接发布的exe应用带命令行调试窗口,在指令内加入-w命令可以屏蔽。

-F指令

注意指令区分大小写。这里是大写。使用-F指令可以把应用打包成一个独立的exe文件,否则是一个带各种dll和依赖文件的文件夹。

-p指令

这个指令后面可以增加pyinstaller搜索模块的路径。因为应用打包涉及的模块很多。这里可以自己添加路径。不过经过笔者测试,site-packages目录下都是可以被识别的,不需要再手动添加。

python学习网,大量的免费python视频教程,欢迎在线学习!