python调用c接口开发_应该是史上最全的python调用C接口

本文详细介绍了如何使用Python调用C接口,包括加载DLL、数据类型对应、函数调用、参数传递、返回值处理、结构体操作、高阶数组定义、字节流与结构体转换及回调函数的实现。通过实例代码,帮助开发者全面掌握这一技能。
摘要由CSDN通过智能技术生成

这段时间需要用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&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值