Promotic

PmaDll - Podrobný popis objektu

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.
Navigace:
 
 
- Dll
- Fce
- PmaDll - Podrobný popis objektu
 
 
© MICROSYS, spol. s r.o.