 {
 *********************************************************************
 Назначение: Интерфейс для вызова DLL из DAQ Pascal.
 Пример конфигурирования:
 [DeviceList]
 &DRIVER = device software program
 [&DRIVER]
 ProgramSource	= ..\DAQPAS\_DLLWRAP.PAS ; Program source file
 DLL_FILE_PATH	= ..\DAQPAS\DRIVER.DLL   ; DLL driver
 .....                                   ; Other information
 *********************************************************************
 }
program DLLWRAP;
var
 hDll:Integer; { Ссылка на DLL }
 {
 Процедура освобождения DLL
 }
 procedure DLL_FREE(var hDll:Integer);
 var b:Boolean;
 begin
  if hDll<>0 then begin
   b:=daqdllcall(hDll,Daq_Cmd_Free);
   b:=daqdllfree(hDll);
   hDll:=0;
  end;
 end;
 {
 Процедура пытается загрузить DLL с заданным именем файла.
 Возвращает ненулевую ссылку DLL или ноль при ошибке.
 }
 function DLL_INIT(DllPath:String):Integer;
 var b:Boolean; hDll:Integer;
 begin
  hDll:=daqdllinit(DllPath);
  if hDll<>0 then if not daqdllcall(hDll,Daq_Cmd_Init) then DLL_FREE(hDll);
  if hDll=0 then b:=fixerror(registererr('Fail load '+DllPath+' !'));
  DLL_INIT:=hDll;
 end;
 {
 Процедура опроса DLL.
 }
 procedure DLL_POLL(hDll:Integer);
 var b:Boolean;
 begin
  if hDll<>0 then b:=daqdllcall(hDll,Daq_Cmd_Poll);
 end;
begin
 {
 При старте загружаем DLL
 }
 if runcount=1 then hDll:=DLL_INIT(readini('DLL_FILE_PATH')) else
 {
 При останове удаляем DLL
 }
 if isinf(runcount) then DLL_FREE(hDll) else
 {
 В цикле опроса вызываем DLL
 }
 if hDll<>0 then DLL_POLL(hDll);
end.

