2014-11-20 10 views
-1

ПРИМЕЧАНИЕ. У меня есть целая куча кода, поэтому она в настоящее время хранится here.Функция не работает должным образом

Итак, у меня есть два файла. Файл CPP является частью библиотеки C .so, которая использует ctypes для интеграции с Python. Однако, когда я бегу test.py, это ничего не печатать, даже если я приписан тип возвращаемого

interfaceLib.concatString() 

к переменной «текст», который затем распечатать.

ответ

0

Функциональные вызовы в ctypes возвращают int по умолчанию. Вам нужно будет указать restype вашей библиотечной функции. Попробуйте следующее:

from ctypes import CDLL, c_char_p 

interfaceLib = CDLL('Shared_Lib/bin/Library/libShared_Lib.so') 

interfaceLib.test() 
str1 = "H" 
str2 = "I" 
interfaceLib.concatString.argtypes = [c_char_p, c_char_p] 
interfaceLib.concatString.restype = c_char_p 
text = interfaceLib.concatString(str1.encode('utf-8'), str2.encode('utf-8')) 
print(text) 
+0

Теперь я получаю файл ошибки "test.py", строки 10, в текст = interfaceLib.concatString (str1, str2) ctypes.ArgumentError: аргумент 1: <класс 'TypeError' >: неправильный тип – Axmill

+0

Попробуйте удалить строку 'interfaceLib.concatString.argtypes = [c_char_p, c_char_p]' или преобразовать строки в байтовые массивы с помощью 'encode' (см. отредактированный ответ). Установка 'argtypes' не требуется для целых чисел, строк или массивов байтов, но для всех остальных типов. – mhavu

+0

Интерфейс C не может использовать объекты '' string 'C++. Измените его на 'char *'. – eryksun