Форум сайта python.su
Подскажите пожалуйста как наиболее быстро и эффективно импортировать DLL в Python.
Немного помучился и составил вот такую конструкцию:
from ctypes import *
a = CDLL(“MyDLL.dll”)
a.MyMin.restype = c_double
print( “MyDLL”, a.MyMin(c_double(10),c_double(2)) )
a.DoubleString.restype = c_char_p
print( “DoubleString”, a.DoubleString(c_char_p(“Hello!!!”)) )
Вот только смущает то, что a.MyMin(c_double(10),c_double(2)) постоянно называется c_double() или a.DoubleString(c_char_p(“Hello!!!”)) c_char_p() не приведёт ли это к потере производительности. Не могли бы вы дать пояснение, пример как правильно назначать и получать значения из DLL типов double, char.
Использую Python v3.1.3
Офлайн
Я подозреваю самый быстрый способ вызова - вкомпилировать ваши функции в интерпретатор пользоваться
Python/C API Reference Manual и обойтись без dll. У вас будет потеря производительности по сравнению с прямым включением, но не очень большая. Без конструкторов c_double не обойтись - надо преобразовывать внутренние целые питона в сишные double
Можно чуть чуть сэкономить если у вас меняются не все аргументы.
Офлайн
Потери на ctypes мизерные. На них не стоит обращать внимание - у вас Питон а не С.
Не верите - измерьте сами.
P.S. Кроме restype удобно указывать еще и argtypes
Офлайн
Спасибо буду работать.
Офлайн