Найти - Пользователи
Полная версия: Python + Delphi Dll
Начало » Python для новичков » Python + Delphi Dll
1
Nahtrezer
Здравствуйте.
Имеется библиотека, написаная на делфи, из готорой необходимо вызвать процедуру
Документация к ней гласит такое:
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).
Какой порекомендуете вариант?
Заранее благодарен
agalen
Тебе нужно указать типы входных параметров.
calc = myLib.CALCULATION
TINPUT = c_double * 9
TOUTPUT = c_double * 40
calc.argtypes = [ c_int, c_int, TINPUT, c_int, c_int, TOUTPUT ]
Nahtrezer
Большое спасибо за Вашу помощь!
Единственное, пришлось изменить cdll на windll. Я так думаю - виной тому stdcall.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB