в том что это скорее всего не дровах дело, я почти уверен, так как, example с advantech на visial basic вроде работает (хотя с временными задержками не очень понятно работает). В его исходнике разобраться по-моему невозможно(куча невообразимых переопределений). Но в delphy k функции вроде нормально обращаюсь, вот что у меня с небольшим описанием:
status = DRV_QCounterRead(DriverHandle,lpQCounterRead)
Purpose
Reads the current counter total without disturbing the counting process
and returns the count and overflow conditions.
Parameters
DriverHandle
Input long default assigned by DRV_DeviceOpen
lpQCounterRead
Input/Output long pointer to PT_QCounterRead
default the storage address for counter, overflow, LoCount and HiCount
где:
PT_QCounterRead
typedef struct tagPT_QCounterRead
{ USHORT counter;
USHORT far *overflow;
ULONG far *LoCount;
ULONG far *HiCount;
} PT_QCounterRead, FAR * LPT_QCounterRead;
PT_QCounterRead
is used by DRV_QCounterRead function .
Member Description
Counter Input unsigned short counter number
Overflow
Output long pointer to unsigned short
overflow state of the counter, 1 means overflow, otherwise 0
LoCount
Output long pointer to unsigned long
the low 32-bit data of current total
HiCount
Output long pointer to unsigned long
the high 32-bit of current total
и собственно обращение в программе:
procedure TForm1.iTimers1Timer1(Sender: TObject);
begin
iTimers1.Enabled1:= false;
// читаем из защелки значение первого счетчика
CounterRead.counter:=0;
// CounterRead.LoCount:=@result;
stat:=DRV_QCounterRead(DriverHandle,CounterRead);
if stat>0 then MessageBox(Handle,'Cannot read from device','',MB_OK);
// и выводим
// Edit2.Text:=FloatToStrF(result, ffFixed, 5, 2);
end;
вот вреде все прозрачно, но работать это не хочет, тестировалось на разных машинах! Есть подозрение что описание на эту функцию не совсем верно
, хотя кто знает
Огромное спасибо всем откликнувшимся!