參考鏈接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文件用,參考地址在上面,講一下注意的點。
- 安裝的時候version選擇最新的即可。
- 安裝目錄隨便選,不是C盤也可以.
在這一步下載的時候,大概是20分鍾左右,如果覺得慢的話,可以直接去下載源碼然后解壓即可,參考文章里的八、問題列表里有說明
- 安裝好記得在命令行里面驗證一下是否正確安裝
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(""); }
生成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類的對象。