%% ProgramName=DLL_CTRL
%% DLL_FILE_PATH=DLL_FILE_PATH
 {
 Программа организует вызов DLL-программы из программы на DAQ PASCAL.
 }
program %ProgramName%;
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.

