python调用dll详解

python

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

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

参考链接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*2;

}

float floatAdd(float a,float b) {

return a+b;

}

void HelloWorld(char * str){

puts(str);

}

void Ints(int * arr,int n){

for(int i=0;i<n;i++){

printf("%d ",arr[i]);

}

puts("");

}

View Code

生成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详解 的全部内容, 来源链接: utcz.com/z/388884.html

回到顶部