Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 22, 2010 20:00:21

gadmaker
От:
Зарегистрирован: 2010-12-22
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт DLL в Python

Подскажите пожалуйста как наиболее быстро и эффективно импортировать 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



Офлайн

#2 Дек. 22, 2010 21:51:47

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Импорт DLL в Python

Я подозреваю самый быстрый способ вызова - вкомпилировать ваши функции в интерпретатор пользоваться
Python/C API Reference Manual и обойтись без dll. У вас будет потеря производительности по сравнению с прямым включением, но не очень большая. Без конструкторов c_double не обойтись - надо преобразовывать внутренние целые питона в сишные double
Можно чуть чуть сэкономить если у вас меняются не все аргументы.



Офлайн

#3 Дек. 23, 2010 04:30:23

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Импорт DLL в Python

Потери на ctypes мизерные. На них не стоит обращать внимание - у вас Питон а не С.
Не верите - измерьте сами.

P.S. Кроме restype удобно указывать еще и argtypes



Офлайн

#4 Дек. 23, 2010 15:00:48

gadmaker
От:
Зарегистрирован: 2010-12-22
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт DLL в Python

Спасибо буду работать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version