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Θ: