在ctypes和c dll之间交换数据的正确方法是什么?

时间:2016-01-12 10:19:30

标签: python c ctypes

Ctypes非常适合python调用c dll。为了从c获得计算结果,通常我将一条json文件路径从python传递给c并将结果保存在c程序中的这个json文件中。但我认为在python端重复传递文件路径并打开文件,写入数据,在c侧关闭文件并打开文件,读取数据,再次在python端关闭文件是微不足道的。我想直接在python和c之间交换json-string。但我不知道如何管理数据指针(char *)。是应该从python传递到c还是由c生成并由c删除?是否可以方便地在python和c之间交换数据?

1 个答案:

答案 0 :(得分:2)

传递字符串作为输入的示例。只需传递一个字节字符串。该函数不得写入字符串。

plugin.tx_news.settings.detail.media.image.lightbox.enabled

作为输出,创建一个可写的字符串缓冲区:

// int func(const char* s)
import ctypes
dll = ctypes.CDLL('some_dll')
func = dll.func
func.argtypes = [ctypes.c_char_p]
func.restype = ctypes.c_int
result = func(b'some json data')