Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 4, 2013 11:58:51

Nahtrezer
Зарегистрирован: 2013-09-04
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Delphi Dll

Здравствуйте.
Имеется библиотека, написаная на делфи, из готорой необходимо вызвать процедуру
Документация к ней гласит такое:

type TINPUT = array[1.. 9] of double;
TOUTPUT = array[0..39] of double;
procedure CALCULATION( var z1 : integer; var z2 : integer; var INPUT : TINPUT; var z3 : integer; var z4 : integer; var OUTPUT : TOUTPUT); stdcall; 

Где z1, z2, z3, z4 - вспомогательные переменные не несущие глобального смысла и необходимые для работы этой библиотеки в VBA (в C# я передавал нули и всё было ок)
INPUT и OUTPUT - массивы типа double.

Делаю:
from ctypes import *
myLib = cdll.LoadLibrary("D:\\ROTOR.dll")
input = [1013,3000,-22,90,3000,20,40,3,600]
output = []
z1 = 0
z2 = 0
z3 = 0
z4 = 0
myLib.CALCULATION(z1, z2, input, z3, z4, output)

Получаю:
ArgumentError: argument 3: <type 'exceptions.TypeError'>: Don't know how to convert parameter 3

Задним умом понимаю, что проблема в том, что библиотека просит массив double, а я посылаю ей int. (ну, если поставить точки - то float).
Какой порекомендуете вариант?
Заранее благодарен

Офлайн

#2 Сен. 4, 2013 13:30:39

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

Python + Delphi Dll

Тебе нужно указать типы входных параметров.

calc = myLib.CALCULATION
TINPUT = c_double * 9
TOUTPUT = c_double * 40
calc.argtypes = [ c_int, c_int, TINPUT, c_int, c_int, TOUTPUT ]



Офлайн

#3 Сен. 4, 2013 15:05:35

Nahtrezer
Зарегистрирован: 2013-09-04
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Python + Delphi Dll

Большое спасибо за Вашу помощь!
Единственное, пришлось изменить cdll на windll. Я так думаю - виной тому stdcall.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version