在 Python 中设置 c_char_p

set c_char_p in Python

在我的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)

但我收到 pointerParam 的“output parameter is NULL”错误。我应该如何正确定义Python中的“___OUT_ char* pointerParam”?

___OUT_ char* pointerParam

规范中的___OUT_一般表示这个指针会有数据写入。所以你必须分配一个缓冲区来写入。 ctypes.c_char_p() 不会创建缓冲区 - 它只是一个空指针。

调查ctypes.create_string_buffer。您必须弄清楚 callAndSave 期望的缓冲区有多大。