Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Příklady na volání funkcí v Dll knihovnách

Popis příkladu ExamDLL

Příklad je umístěn ve složce /Pm/Examples/Others/PmDll/Exam.

Příklad ilustruje využití DLL (dynamicky linkovaných knihoven), jejich propojení se systémem PROMOTIC a volání funkcí obsažených v těchto knihovnách.

V této ukázkové aplikaci byly vytvořeny objekty:

Objekt PmDll s názvem "Func" a obraz (PmPanel).

Objekt "Func" typu PmDll slouží ke zpřístupnění funkcí v DLL. V jeho záložce Dll je nutné zadat plnou cestu k souboru požadované knihovny (v tomto případě FuncDLL.dll).

Obraz má dvě tlačítka, která spouští uživatelské metody obrazu MaxDll a SumDll.

 
Metoda obrazu SumDll volá funkci Soucet z knihovny FuncDLL pro součet dvou celých čísel. Do položky Debug_info v INFO systému se vypíše výsledek.
 
Metoda obrazu SumMax pracuje podobně, s tím rozdílem, že při jejím vyvolání se provede funkce Max z knihovny FuncDLL pro nalezení maxima ze tří celých čísel. Výsledek se rovněž vypisuje do položky Debug_info.
Výpis ze skriptu:
v uživatelské metodě MaxDll obrazu "Main":
Dim p(3)
p(0) = CLng(3)
p(1) = CLng(5)
p(2) = CLng(2)
Pm.Debug "Max(3, 5, 2) = " & pMe.Pm("/Func").Fce.Max(p)
 
V tomto případě je předávání parametru funkci o něco složitější, protože funkce Max bere jako parametr strukturu složenou ze tří celočíselných hodnot. Tato struktura se v systému PROMOTIC vytvoří jako pole délky 3. Ovšem aby předání do funkce proběhlo korektně je potřeba každou hodnotu pole zkonvertovat pomocí funkce CLng na 4-bytové číslo. Důvodem tohoto je, že ve VBScript se každé nové proměnné automaticky přiřadí odpovídající datový typ. Ten však nemusí odpovídat typu, který je požadován funkcí knihovny, jež může být naprogramována v jiném jazyce. Strukturované datové typy je potřeba předávat referencí. V tomto případě je funkce Max vytvořena tak, že přebírá strukturu tří čísel typu Integer, což znamená 3*4 Byte. Proto se zde před voláním Max musí každé číslo explicitně zkonvertovat na 4-bytovou hodnotu typu Long. Viz Popis syntaxe souboru deklarací funkcí v DLL knihovně.
 
Popis FuncDLL.dll:

Tato knihovna byla vytvořena v programovacím jazyku Visual C++. Poskytuje dvě funkce:

- Funkce Soucet(a, b), jejíž parametry a, b jsou dvě celá čísla předávaná hodnotou a vrací jejich součet a+b.
- Funkce Max(st) má vstupní parametr st předávaný referencí, který je nějaká datová struktura složená ze tří celočíselných (4-bytových) hodnot. Vrací celé číslo, jež je jejich maximem.
 
K příkladu je dodán i zdrojový text knihovny v jazyku C++ v souboru FuncDLL.cpp. Tento soubor není nutný pro volání funkcí ze systému PROMOTIC.
 
K tomu, aby PROMOTIC mohl volat funkce obsažené v DLL knihovně je potřeba vytvořit soubor deklarací. Tento soubor musí mít stejný název jako příslušná knihovna, ale příponu .inc (v tomto případě má název FuncDLL.inc), a musí být umístěn ve stejné složce jako jeho knihovna. Každý jeho řádek obsahuje deklaraci jedné funkce. Není potřeba deklarovat všechny funkce z knihovny, ale pouze ty, které budou v PROMOTICU využívány. Viz Popis syntaxe souboru deklarací funkcí v DLL knihovně.

Příklad komunikace s kartami PCL720 a PCL818H

Příklad je umístěn ve složce /Pm/Examples/Others/PmDll/CardPCL.

Součástí tohoto příkladu jsou soubory:

PCLCards.pra - PROMOTIC aplikace
Ad818s.inc - inicializační soubor pro knihovnu Ad818s.dll
Adapi32.inc - inicializační soubor pro knihovnu Adapi32.dll

(v nich jsou deklarace používaných funkcí z příslušných .dll)

 
Instalace:

Pro komunikaci s kartami je potřeba zkopírovat (instalovat) příslušné .dll knihovny od Advantechu na disk (např. do systémové složky Windows). Do stejné složky se musí přesunout také .inc soubory. Aby mohly být I/O karty využívány, musí se nastavit jejich konfigurace v programu pro setup od Advantechu.

 
Spuštění aplikace:

Po spuštění aplikace PCLCards je potřeba nastavit cestu ke každé používané DLL. Provede se to pro každý DLL objekt ve složce "Dll". Vstupně-výstupní operace se spouští stiskem kombinace kláves, které lze vyčíst ze složek ve stromu objektů.

 
Knihovna Advantechu ad818s.dll obsahuje funkce speciálně pro karty typu PCL818 a adapi32.dll univerzální funkce pro karty od Advantechu.
 
Více informací lze získat z těchto zdrojů:
Dokumentace PROMOTIC - práce s DLL a .inc soubory
Dokumentace k používaným knihovnám - setup karet a popis všech funkcí
Dokumentace k I/O kartám - popis HW nastavení
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice