2015-04-14 2 views
0

В заголовочном файле C У меня есть:набор c_char_p в Python

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
___OUT_ char* pointerParam 

___OUT_ в спецификации как правило, означает, что этот указатель будет иметь данные, записанные на него. Поэтому вы должны выделить буфер для записи. ctypes.c_char_p() не создает буфер - это всего лишь нулевой указатель.

Посмотрите на ctypes.create_string_buffer. Вы должны выяснить, насколько большой буфер callAndSave ожидает.

Смежные вопросы