这段时间需要用python调用C的接口,网上搜了很多,结合python的官方文档,整理下备用
1、加载dll
from ctypes import *
dll = cdll.LoadLibrary('DLL1.dll')#func1
dll = CDLL('DLL1.dll')#func2
print(dll)
2、数据类型的对应
3、函数调用
C
DLL1_API int fnDLL1(void)
{
return 42;
}
Python
print(dll.fnDLL1())
4、参数传递
C
DLL1_API int fnDLL2(int a, float b, double c, const char * buffer,int &d)
{
printf("recv : %d,%f,%f,%s,\n", a, b, c, buffer);
d = 10;
return 1;
}
int double float 这些类型可以直接传递
char * 直接传递bytes
指针或者引用类型需要用byref或者pointer,也可以用相应类型的指针类型
例如上个接口中传递 int &d 在传递的过程中可以用 byref(temp)
Python
temp = c_int(0)
print(dll.fnDLL2(1,c_float(2.0),c_double(3.0),'hell0'.encode('gbk'),byref(temp)))
print('byref',temp1.value)
也可以用int的指针类型,这个类型需要自己定义,POINTER一般针对类型
而pointer针对实例化以后的对象,比如上面也可以用pointer(temp)
type_p_int = POINTER(c_int)
temp = type_p_int(c_int(0))
print(dll.fnDLL2(1,c_float(2.0),c_double(3.0),'hell0'.encode('gbk&