blog-rui

参考链接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类的对象。

 

分类:

技术点:

相关文章:

  • 2021-06-14
  • 2021-12-26
  • 2021-12-14
  • 2022-01-16
  • 2022-02-12
  • 2021-06-28
  • 2021-12-17
  • 2021-09-20
猜你喜欢
  • 2018-11-05
  • 2022-01-20
  • 2021-12-26
  • 2021-10-22
相关资源
相似解决方案