Python调用C动态库并通过bytes传参

通过Python内建库ctypes调用C语言。

#!/usr/bin/python3

# file : bytes_test.py

import ctypes as ct
import os

# 编译C程序为动态库
os.system("gcc -fpic -shared bytes_test.c -o bytes_test.dll")

# 加载动态库
clib = ct.CDLL("./bytes_test.dll")

# 分配内存
src = b"0123"
out = bytes(len(src))

print(f"src={src}, out={out}")

# 取指针
src_ptr = ct.cast(src, ct.c_char_p)
out_ptr = ct.cast(out, ct.c_char_p)

# 调用C函数
clib.copy(out_ptr, src_ptr, len(src))

print(f"src={src}, out={out}")

// file : bytes_test.c

int copy(unsigned char *out, unsigned char *src, int size)
{
	int i;
	
	for(i=0; i<size; ++i){
		out[i] = src[i];
	}
	return i;
}

posted @ 2023-11-08 17:43  立秋了  阅读(65)  评论(0编辑  收藏  举报