在 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
期望的缓冲区有多大。
在我的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
期望的缓冲区有多大。