Promotic
WikipediaLinkedInYoutubeTwitterFacebook

PmDll - Podrobný popis objektu

Viz: Objekt PmDll
 
Popis syntaxe souboru deklarací funkcí v DLL knihovně:

Aby systém PROMOTIC věděl, které funkce z DLL knihovny může použít a jaký je tvar těchto funkcí, musí u knihovny DLL být textový soubor s příponou .INC, který se jmenuje stejně 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 jménem parametru uvedeno klíčové slovo ByVal, je tento parametr předáván hodnotou. V opačné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 byte Celé číslo od 0 do 255
Integer 2 byte Celé číslo od -32 768 do +32 767
Long 4 byte Celé číslo od -2 147 483 648 od +2 147 483 647
Single 4 byte Reálné číslo +/- 3,4E +/- 38 (7 platných číslic)
Double 8 byte Reálné číslo +/- 1,7E +/- 308 (15 platných číslic)
String dle počtu znaků Textový řetězec
Any součet bytů podpoložek Pole hodnot
 
Předávání struktur a polí:

Pokud je v deklaraci funkce v .INC souboru uvedeno u typu parametru slovo Any, systém PROMOTIC dovolí předat jako parametr funkce jakákoli data. Při vyvolá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 máte-li 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, neboť 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 bytů.
2. Je nutné explicitně nastavit typy předávaných dat pomocí funkcí skupiny CInt, CLng, atd.
3. Nikdy neuškodí předáme-li 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. Chceme-li ji využít v systému PROMOTIC, 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", sloužící pro zjištění hodnoty spodních 4 bitů celého čísla. Tato funkce vrací v 1-bytovém celém čísle nulu, pokud jsou všechny čtyři spodní bity nulové, jinak 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. Chceme-li ji využít v systému PROMOTIC, 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 PmDll:

Funkce z výše uvedeným způsobem zavedené knihovny zpřístupňuje vlastnost Fce. Mějme objekt "MyDll" typu PmDll, umístěný ve složce "Lib". Chceme-li vyvolat jeho funkci "factor", můžeme psát:

Dim f
f = pMe.Pm("/Lib/MyDll").Fce.factor(6)
Pokud chceme funkce knihovny využívat častěji je výhodnější:
Dim f, g, oFce
Set oFce = pMe.Pm("/Lib/MyDll").Fce
f = oFce.factor(6)
g = oFce.factor(10)
Pokud chceme využívat danou knihovnu globálně, je výhodné zavést odkaz na vlastnost Fce do záložky PmRoot > Proměnné.
Příklad4:
Deklarace DLL funkce v jazyce Microsoft Visual 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á 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);
U překladačů jiných výrobců může být export funkce z DLL (zde __declspec(dllexport)) řešen zcela odlišně. Rovněž u jiných programovacích jazyků je nutné důkladně prostudovat dokumentaci související s exportem a importem funkcí DLL knihoven.
Navigace:
 
 
- Fce
- PmDll - Podrobný popis objektu
 
 
- Dll
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice