在Python中调用C/C++动态库

最近项目中需要用Python调用C/C++的动态库,研究了一下Ctypes。

上游给出的是编译好的.so文件,以下是用Ctypes调用的方式:

from ctypes import *
lib = cdll.LoadLibrary('./xxx.so')

#假设xxx.so定义了一个init函数
init = lib.init
init()

#关于类型和参数:
i = c_int(2)
# int size

pChar = (c_char_p * 4)(addressof(create_string_buffer(8))) 
# char * pChar = new char[8];

c_char_p("CERTAIN_STRING".encode("utf-8"))
# "CERTAIN_STRING".c_str()

data = [1,2,3,4,5]
p_data = (c_ubyte * len(data))(*data)
# unsigned char * data

int_list = [1,2,3,4]
p_int_list = pointer((c_int*(4))(*int_list))
# int * int_list

#关于返回:
#API int* rec(int* p)
p = pointer(c_int(0))
rec = lib.rec
rec.restype = POINTER(c_int)

rs = rec(p)
for i in range(p.contents.value):
    ...
rs[0]

Contents


本站采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议

知识共享许可协议