в k8047d.dll есть 6 функций:
1) StartDevice()
2) StopDevice()
3) LEDon() - включает лампочку на вольтметре
4) LEDoff() - выключает лампочку на вольтметре
5) SetGain(Channel, Gain) - устанавливает максимальное напряжение (Gain), которое можно подключить к каналу (Channel). Channel может принимать значения 1..4, Gain - 1,2,5,10.
6) ReadData(Buffer) - возвращает массив из 8 элементов. два первых - отвечают за таймер, 4 следующих за напряжение на каналах, а два последних - хз за что (они не нужны)
так вот StartDevice(), StopDevice(), LEDon() и LEDoff() работают.
теперь первый вопрос: при вызове SetGain() вылазит ошибка, хотя вроде правильно всё указываю:
>>> from ctypes import *
>>> lib=cdll.k8047d
>>> lib.StartDevice()
33
>>> lib.SetGain(3,5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Procedure called with not enough arguments (8 bytes missing) or wrong calling convention
var // global variables
DataBuffer: ARRAY[0..7] OF Integer;
procedure TForm1.Button1Click(Sender: TObject);
var p:pointer;
i:integer;
s:string;
begin
p:=@DataBuffer; // Address of the data buffer
ReadData(p); // Read the data from K8047
memo1.clear;
s:='';
for i:=0 to 7 do s:=s +inttostr(DataBuffer[i]+chr(9);
memo1.lines.add(s); // Display the data
end;