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.
Declare Function MyFce Lib "MyDll" ([ByVal] Par As TypePar[, ...]) As TypeRet
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 je tento parametr 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 číslic) |
Double | 8 bajtů | Reálné číslo | +/- 1,7E +/- 308 (15 platných číslic) |
String | dle počtu znaků | Textový řetězec | |
Any | součet bajtů podpoložek | Pole hodnot |
Pokud je v deklaraci funkce v .INC souboru uvedeno u typu parametru slovo Any, pak systém PROMOTIC dovolí 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:
Declare Function factor Lib "usrdll" (ByVal n As Integer) As Double
Declare Function nibble Lib "usrdll" (ByVal B As Byte, bit1 As Byte, bit2 As Byte, bit3 As Byte, bit4 As Byte) As Byte
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:
Dim f
f = pMe.Pm("/Lib/MyDll").Fce.factor(6)
Dim oFce, f, g
Set oFce = pMe.Pm("/Lib/MyDll").Fce
f = oFce.factor(6)
g = oFce.factor(10)
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á délku 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);