c++和python交互,python怎么和c++一起使用
Ctypes是python的外部库,可以用Python语言调用编译好的C语言函数和数据类型,交换数据。ctypes的官方文件在https://docs.python.org/3/library/ctypes.html.
1、ctypes基本数据类型映射表
2、python调用c语言的函数库
(1)生成c语言函数
#步骤1:测试. c
# includestdio.h
intadd(inta,intb)
{
return b;
}(2)编译动态链接库生成libtest.so文件(DLL)
gcc-fpic-shared test . c-o libtest . so(3)调用DLL文件
#Step3:test.py
fromctypesimport*
Mylib=CDLL(libtest.so )或CDLL。LoadLibrary(libtest.so )
add=mylib.add
Add.argtypes=[c_int,c_int]#参数类型,两个int(c _ int是ctypes的一种类型,见上表)
Add.restype=c_int#返回值类型,int(c_int是ctypes的类型,见上表)
总和=加(3,6)3、指针和引用
给指针实例赋值只会改变它所指向的内存地址,而不会改变内存的内容。该实例有一个contents属性,该属性返回由该指针指向的对象。
fromctypeimport*
i=c_int(1)
pi=指针(c_int)(i)
pi2=指针(I)
Print.contents #返回对象指针的值
printpi2.contentsPOINTER和POINTER的区别在于,指针返回实例,指针返回类型。
4、结构类型数据
结构和联合必须继承结构和联合的基本类,它们都是在ctypes模块中定义的。每个子类必须定义一个字段属性。fields是一个二维元组列表,包含每个字段的名称和类型。此字段类型必须是ctypes类型,如c_int,或者继承ctypes的任何其他类型,如结构、联合、数组、指针等。
fromctypesimport*
导入类型
classTest(结构):
_fields_=[(x ,c_int),( y ,c_char)]
1=test (1,2)如果一个结构用于链表操作,即当它包含一个指向该结构的指针时,需要定义如下:
fromctypesimport*
导入类型
classTest(结构):
及格
测试。_ fields _=[(x ,c _ int),( y ,c _ char),( next ,pointer (test))]热门IT软件开发工作室,大量免费python视频教程,欢迎在线学习!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。