Deklarace externφch procedur a funkcφ

Vnit°nφ programovacφ jazyk WinBase602 umo₧≥uje volat i procedury a funkce implementovanΘ v externφch knihovnßch typu DLL. Lze volat pouze ty procedury a funkce, kterΘ vyhovujφ volacφ konvenci stdcall (v jazyce C musφ b²t oznaΦeny klφΦov²m slovem _stdcall, v Borland Pascalu stdcall) a musφ mφt tzv. C-linkage, tedy musφ b²t exportovßny bez informace o typech parametr∙ (v jazyce C++ musφ b²t oznaΦeny extern "C").

VÜechny takovΘto procedury a funkce musφ b²t v programu p°ed mφstem svΘho prvnφho pou₧itφ deklarovßny. Deklarace mß jeden z t∞chto dvou tvar∙:

hlaviΦka procedury nebo funkce; 
EXTERNAL 'jmΘno_knihovny' 
hlaviΦka procedury nebo funkce; 
EXTERNAL  'jmΘno_knihovny'   NAME  ' jmΘno_funkce_v_knihovn∞'; 

Pokud je jmΘno funkce v programu a v knihovn∞ stejnΘ, pou₧ijete prvnφ, zkrßcen² tvar, jsou-li r∙znΘ, pou₧ijete druh² tvar. V praxi je nutno jmΘno funkce v knihovn∞ uvßd∞t pouze tehdy, pokud je delÜφ ne₧ 14 znak∙ nebo pokud ve svΘm programu ji₧ mßte stejn∞ pojmenovan² objekt.

Pokud jmΘno dynamickΘ knihovny uvedete bez p°φpony, p°edpoklßdß se p°φpona DLL. Upozor≥ujeme, ₧e n∞kterΘ knihovny majφ p°φpony jinΘ ne₧ DLL a je nutno je uvΘst.

Deklarace nejpou₧φvan∞jÜφch funkcφ z Windows API jsou obsa₧eny v souboru WINAPI32.PGM. Tento soubor naleznete po instalaci WinBase602 ve stejnΘm adresß°i, jako jejφ programy, a m∙₧ete jej importovat do svΘ aplikace a potΘ includovat do programu.

P°φklad:

N∞kterΘ slo₧it∞jÜφ funkce z Win32 API, pou₧itφ je ukßzßno ve funkci FileDate, kterß vrßtφ datum souboru se zßlohou

CONST
 MAX_PATH= 260;
 ALIAS=14;

type
 _WIN32_FIND_DATA=record 
    dwFileAttributes      :integer; 
    ft1CreationTime       :integer;     
    ft2CreationTime       :integer;     
    ft1LastAccessTime     :integer; 
    ft2LastAccessTime     :integer; 
    ft1LastWriteTime      :integer;     
    ft2LastWriteTime      :integer;     
    nFileSizeHigh         :integer; 
    nFileSizeLow          :integer;     
    dwReserved0           :integer;     
    dwReserved1           :integer; 
    cFileName             :string[MAX_PATH];     
    cAlternateFileName    :string[ALIAS]; 
end;

type 
_SYSTEMTIME=record   
     wYear          :short;     
     wMonth         :short; 
     wDayOfWeek     :short;     
     wDay           :short;     
     wHour          :short;     
     wMinute        :short; 
     wSecond        :short;     
     wMilliseconds  :short; 
end;

function FindFirstFile( 
    var  lpFileName:string;             // jmΘno hledanΘho souboru
    var  lpFindFileData:_WIN32_FIND_DATA // vracφ info o souboru, pokud nalezen
 ) : integer;
external "KERNEL32";

function FileTimeToLocalFileTime( 
    var lpFileTime:integer;         // pointer to UTC file time to convert 
    var lpLocalFileTime:integer     // pointer to converted file time 
 ):Boolean;
external "KERNEL32";
 
function FileTimeToSystemTime( 
    var lpFileTime:integer;         // pointer to file time to convert 
    var lpSystemTime:_SYSTEMTIME    // pointer to structure to receive system time 
 ):Boolean;
external "KERNEL32";
function FileDate(var fname : string) : Boolean;
/*********************************************************************/
// do globßlnφ °et∞zcovΘ prom∞nnΘ "zaldatum" dosadφ datum souboru
var
  lpFindFileData : _WIN32_FIND_DATA ;
  hFindFile,lpLocalFileTime,lpFileTime : integer;
  lpSystemTime : _SYSTEMTIME;
 
begin
  hFindFile:= FindFirstFile(fname, lpFindFileData);
  if hFindFile<>-1 then begin
    FileTimeToLocalFileTime(lpFindFileData.ft1LastWriteTime,lpLocalFileTime);
    FileTimeToSystemTime(lpLocalFileTime, lpSystemTime);
    zaldatum:= Int2str(lpSystemTime.wDay)+"."+ Int2str(lpSystemTime.wMonth)+"."+ Int2str(lpSystemTime.wYear);
     Info_box(lpFindFileData.cFileName , zaldatum);
  end;
end;

Viz takΘ:

Vnit°nφ programovacφ jazyk

Programy

Deklarace v programech

P°ehled typ∙