您的位置:首页 > 编程语言 > Python开发

python中使用ctypes调用MinGW生成的动态链接库(dll)

2013-06-20 22:07 711 查看
关于gcc编译dll的我就不说了,网上举例一大堆,下面以g++为例。

假设有一个test.cpp文件如下:

extern "C" {
__declspec(dllexport) double add(double x,double y);
}

double add(double x,double y){
return x+y;
}
在MinGW中使用g++编译:

g++ -shared -Wl,--kill-at,--output-def,test.def -o test.dll test.cpp


在python中可以这样调用生成的dll文件:

import ctypes
dll = ctypes.cdll.LoadLibrary('test.dll') #加载动态链接库
f=dll.add #提取函数
f.argtypes=[ctypes.c_double,ctypes.c_double] #定义参数类型
f.restype=ctypes.c_double #定义函数返回值类型
f(2.5,3.5) #计算
显示的结果为:

6.0

注意:加载的时候要根据你将要调用的函数是符合什么调用约定的。

stdcall调用约定:两种加载方式

Objdll = ctypes.windll.LoadLibrary("dllpath")
Objdll = ctypes.WinDLL("dllpath")
cdecl调用约定:也有两种加载方式

Objdll = ctypes.cdll.LoadLibrary("dllpath")
Objdll = ctypes.CDLL("dllpath")


下面的这个文章写得不错,还讲到了结构体:

/article/1423300.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: