文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
怀来网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。成都创新互联公司从2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
提示:这里可以添加本文要记录的大概内容:
python 通过ctypes包调用c++或者c 的方法
提示:以下是本篇文章正文内容,下面案例可供参考
C++中通过 extern “C” { xxxx } 将需要python调用的方法 包含起来,然后打包编译即可,C则不需要使用extern直接就能调用,例如:
extern "C" {ECG_Info cpeek5(int a, int b, int c, int d, int e, int* fdat)
{ECG_Info ecgInfo;
*fdat = 1000;
printf("%d",*fdat);
ecgInfo.a= 1;
return ecgInfo;
}
}
进行编译,例如:
#如果编译的环境配置不匹配,linux切换编译环境(提前安装更新好c++编译环境)
scl enable devtoolset-9 bash
#编译
gcc test.cpp -fPIC -shared -o test.so -lstdc++
二、Python代码
1.引入库代码如下(示例):
import ctypes
or
from ctypes import *
#传递结构体作为参数或者返回值
class Ecginfo(Structure):
_fields_ = [
("a", c_int),
("b", c_int),
("c", c_int),
("d", c_short),
("e", c_char)
]
#加载so文件
productC = cdll.LoadLibrary('/home/hd/mlflow/data/github/c/EPLimited_fix_datatest/a_product.so')
cpeek5= productC.cpeek5
#设置方法参数类型
cpeek5.argtypes=[ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.c_int,ctypes.POINTER(ctypes.c_int)]
#设置方法返回值类型
cpeek4.restype=Ecginfo
#调用方法
fdat_p = ctypes.pointer(ctypes.c_int(0)) # 传递指针变量
product_peek = cpeek5(ctypes.c_int(dat[i]),ctypes.c_int(filted[i]),ctypes.c_int(884),ctypes.c_int(100),ctypes.c_int(60),fdat_p)
#打印修改后的指针变量的结果,值发生了改变
print("fdatum: "+str(fdat_p[0]))
主要对python调用c++的方式介绍,并传递指针变量 , 常规变量 和 对象作为返回值的demo。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧