python怎么调用c++函数,python如何调用c语言
linux版的动态库
写个简单的C代码,test.c
# includestdio.h
#includestdlib.h
char*printStr(constchar*p,constchar*q)
{
printf(%s ,p);
printf(%s ,q);
返回《djstava》;
}通过以下命令编译成动态链接库
gcc-fPIC-shared-olibtest。索特斯特。c相关推荐: 《Python入门教程》
python3中调用
要调用C库中的函数,需要用到指针这个模块
#-*-编码:utf-8-*-
fromctypesimport*
handle=cdll .LoadLibrary(libtest.so )
func=handle.printStr
func.argtypes=(c_char_p,c_char_p)
func.restype=c_char_p
tmp=handle.printStr(hello ).编码( utf-8 ),世界 .编码( utf-8 ))
print(tmp.decode(utf-8 ))程序执行结果:
你好,世界程序解释
func.argtypes=(c_char_p,c_char_p)
func.restype=c_char_p这2句是分别设置参数数据类型和返回值类型,如果不进行设置,直接调用的话,参数可以正常接收,但是返回值永远是个(同国际组织)国际组织值,传入的字符串参数必须为编码( utf-8 ),否则在c库中仅会打印为首字符。
handle=cdll .LoadLibrary(libtest.so )
ret=handle.printStr(hello ).编码( utf-8 ),世界 .编码( utf-8 ))windows版的动态库
可视化工作室编译dll,在需要抛出的方法前加入__declspec(dllexport),比如下面C代码:
_ _ declspec(dll导出)unsigned intcr 32(constunsignedchar * s,unsignedintlen)
{
未签名的
unsignedintcrc32val=0xffffffff
printf(len==%dn ,len);
for(I=0;终场我)
crc32val=crc32_tab[(crc32val^s[i])0xff]^((crc32val8)0x00ffffff);
返回至crc32val
}然后打开对比X64工具命令行提示符,进入到C源码目录,分别执行以下两条命令,第一条命令是生成目标文件obj,第二天命令是链接目标文件,生成动态库。
cl/ccrc.c
link/dllcrc.obj至此,dll文件就生成了,它就是我们需要的动态链接库,dll的调用跟因此的方法一样。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。