在Python中设置c_char_p

时间:2015-04-14 18:37:27

标签: python pointers header-files ctypes

在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中正确吗?

1 个答案:

答案 0 :(得分:0)

___OUT_ char* pointerParam

规范中的___OUT_通常意味着该指针将向其写入数据。所以你必须分配一个缓冲区来写。 ctypes.c_char_p()没有制作缓冲区 - 它只是一个空指针。

查看ctypes.create_string_buffer。你必须弄明白自己有多大的缓冲区callAndSave