Viz: objekt
PmaDll.
Popis syntaxe souboru deklarací funkcí v DLL knihovně:
Aby systém PROMOTIC věděl, které funkce z DLL knihovny lze použít a jaký je tvar těchto funkcí, musí u knihovny DLL být textový soubor s příponou
.INC, s názvem stejným jako DLL knihovna (například u knihovny
XY.DLL musí být soubor
XY.INC). V tomto
.INC souboru odpovídá jeden řádek deklaraci právě jedné funkce.
Syntaxe řádku:
Declare Function MyFce Lib "MyDll" ([ByVal] Par As TypePar[, ...]) As TypeRet
kde:
MyFce |
název deklarované funkce |
MyDll |
název DLL knihovny |
Par |
název parametru funkce |
TypePar |
datový typ parametru (viz další tabulka) |
TypeRet |
datový typ návratové hodnoty funkce |
Pokud je před názvem parametru uvedeno klíčové slovo
ByVal, pak tento parametr je předáván hodnotou. V jiném případě je předáván odkazem.
Povoleny jsou následující
datové typy parametrů:
Název typu |
Velikost paměti |
význam: |
Rozsah |
Byte |
1 bajt |
Celé číslo |
od 0 do 255 |
Integer |
2 bajty |
Celé číslo |
od -32 768 do +32 767 |
Long |
4 bajty |
Celé číslo |
od -2 147 483 648 do +2 147 483 647 |
Single |
4 bajty |
Reálné číslo |
+/- 3,4E +/- 38 (7 platných cifer) |
Double |
8 bajtů |
Reálné číslo |
+/- 1,7E +/- 308 (15 platných cifer) |
String |
dle počtu znaků |
Textový řetězec |
Any |
součet bajtů podpoložek |
Pole hodnot |
Předávání struktur a polí:
Pokud v deklaraci funkce v souboru
.INC je uvedeno u typu parametru slovo
Any, pak systém PROMOTIC umožňuje předat jako parametr funkce jakákoli data. Při volání funkce vytvoří buffer, do kterého se zkopíruje binární obsah předávané proměnné (např. pole vytvořené pomocí
VBScript.Array). Tento buffer předá jako parametr vyvolávané funkci. Po ukončení funkce data z bufferu předá zpět do dané proměnné. Takže pokud máte například pole, jehož typová skladba přesně odpovídá předávané struktuře, můžete využívat i funkce, které mají v parametrech struktury.
!Upozornění! Při předávání struktur a polí se
musí přísně dodržet požadované datové typy položek pole, protože nesprávné použití může mít destruktivní účinky!
Poznámky:
1. Binární obsah struktury může obsahovat i výplňky určené k zarovnávání položek struktury na daný počet bajtů.
2. Je nutno explicitně nastavit typy předávaných dat pomocí funkcí skupiny
CInt,
CLng, atd.
3. Nikdy neuškodí pokud předáme do parametrů funkce větší množství dat, než tato funkce vyžaduje.
Příklad1:
Předpokládejme, že knihovna C:\Library\MyDll.dll obsahuje funkci "factor" pro výpočet faktoriálu daného čísla. Tato funkce má parametr typu 2-bajt celé číslo a vrací 8-bajt reálné číslo. Pokud ji chceme využít v systému PROMOTIC, pak musí soubor C:\Library\MyDll.inc obsahovat následující řádek:
Declare Function factor Lib "usrdll" (ByVal n As Integer) As Double
Příklad2:
Předpokládejme, že knihovna C:\Library\MyDll.dll obsahuje funkci "nibble", která slouží pro získání hodnoty spodních 4 bitů celého čísla. Tato funkce vrací v 1-bajtovém celém čísle nulu pokud jsou všechny čtyři spodní bity nulové, v jiném případě vrací jedničku. Do svých parametrů č. 2 až č. 5 (typu Byte) nastaví hodnoty spodních 4 bitů parametru č. 1, který je opět typu Byte. Pokud ji chceme využít v systému PROMOTIC, pak musí soubor C:\Library\MyDll.inc obsahovat následující řádek:
Declare Function nibble Lib "usrdll" (ByVal B As Byte, bit1 As Byte, bit2 As Byte, bit3 As Byte, bit4 As Byte) As Byte
Všimněte si, že parametr B je předáván hodnotou, zatímco ostatní parametry jsou předávány odkazem.
Příklad3:
Použití objektu PmaDll:
Funkce z výše uvedeným způsobem zavedené knihovny zpřístupňuje vlastnost
Fce. Mějme objekt "MyDll" typu
PmaDll, umístěný ve složce "
Lib". Pokud chceme vyvolat jeho funkci "factor", pak můžeme psát:
VBScriptVyber a zkopíruj do schránky
Dim f
f = pMe.Pm("/Lib/MyDll").Fce.factor(6)
Pokud chceme funkce knihovny využívat častěji, pak je výhodnější:
VBScriptVyber a zkopíruj do schránky
Dim oFce, f, g
Set oFce = pMe.Pm("/Lib/MyDll").Fce
f = oFce.factor(6)
g = oFce.factor(10)
Pokud chceme využívat danou knihovnu globálně, pak je výhodné zavést odkaz na vlastnost
Fce v konfiguračním okně "
Proměnné".
Příklad4:
Deklarace DLL funkce v jazyce C++
Tento příklad demonstruje, jak vypadá rozhraní funkcí "factor" a "nibble" z příkladů 1 a 2 v jazyce C. Proměnná typu double má velikost 8B, proměnná typu char 1B a proměnná typu short 2B
extern "C" double __declspec(dllexport) __cdecl factor(short n);
extern "C" char __declspec(dllexport) __cdecl nibble(char B, char *bit1, char *bit2, char *bit3, char *bit4);
U překladačů jiných výrobců může být export funkce z DLL (zde __declspec(dllexport)) řešen zcela odlišně. Také u jiných programovacích jazyků je nutno důkladně prostudovat dokumentaci související s exportem a importem funkcí DLL knihoven.