在C头文件中我有:
long test_API callAndSave(
___OUT_ char param1[31],
___OUT_ char param2[5],
___OUT_ char param3[21],
___OUT_ char* pointerParam
);
我正在尝试设置并传递Python
中的所有参数并将其传递给callAndSave
:
import ctypes
from ctypes import *
lib = cdll.LoadLibrary('./testlib.so')
param1 = (ctypes.c_char*31)()
param2 = (ctypes.c_char*5)()
param3 = (ctypes.c_char*21)()
pointerParam = ctypes.c_char_p()
lib.eftTrx(param1,param2,param3,pointerParam)
但我得到" output parameter is NULL
" pointerParam
的错误。我该如何定义" ___OUT_ char* pointerParam
"在Python中正确吗?
答案 0 :(得分:0)
___OUT_ char* pointerParam
规范中的___OUT_
通常意味着该指针将向其写入数据。所以你必须分配一个缓冲区来写。 ctypes.c_char_p()
没有制作缓冲区 - 它只是一个空指针。
查看ctypes.create_string_buffer
。你必须弄明白自己有多大的缓冲区callAndSave
。