Я хотел бы использовать функцию из данной 64-битной общей библиотеки C++ (файл .so под linux) из python 2.7.8.Вызов 64-битной общей библиотеки C++ из Python
The header С ++ разделяемой библиотекой имеет эту функцию:
EXPORT_CODE double CONVENTION PropsSI(const char *Output, const char *Name1, double Prop1, const char *Name2, double Prop2, const char *Ref);
Мне нужно решение, которое не требует, чтобы изменить код C++ из общей библиотеки (полный Python обертку уже существует с обычаем библиотека).
Вот рабочий раствор на основе ответа ниже:
>>> import ctypes
>>> lib = ctypes.cdll.LoadLibrary("/PathTo/libCoolProp.so")
>>> PropsSI = lib.PropsSI
>>> PropsSI.argtypes = (ctypes.c_char_p, ctypes.c_char_p, ctypes.c_double, ctypes.c_char_p, ctypes.c_double, ctypes.c_char_p)
>>> PropsSI.restype = ctypes.c_double
>>> result = PropsSI(b"H", b"T", 300., b"P", 101325., ctypes.create_string_buffer("Water", 8))
>>> result
112654.89965373254
А вот другой способ, чтобы написать это:
>>> from ctypes import *
>>> CoolProp = cdll.LoadLibrary('/PathTo/libCoolProp.so')
>>> PropsSI = CoolProp.PropsSI
>>> PropsSI.restype = c_double
>>> print PropsSI(c_char_p("H"), c_char_p("T"),c_double(300.),c_char_p("P"),c_double(101325.),c_char_p("Water"))
112654.899654
'ctypes' должен работать нормально. Установили ли вы 'argtypes' и' restype' функции? Почему бы не поделиться тем, как вы настроили свою функцию на python и что произошло, когда вы пытались ее вызвать. – Dunes
«Вопросы, требующие помощи по отладке (« почему этот код не работает? ») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе». –
@Dunes @Antii Я обновил вопрос. Вы правы, это может быть проблемой для 'argtypes'. – Togh