Knihovny DLL

Řízení programu


 

Tato skupina funkcí je určena pouze pro programátory dobře znalé problematiky Windows API. Umožňuje doplňování funkcí a vlastností, které programovací systém Petr přímo sám nepodporuje. Pomocí funkcí pro přístup k DLL je možné využívat všechny funkce operačního systému Windows a stejně tak i funkce doplňkových knihoven DLL. Funkce nejsou nijak systémem Petr kontrolovány (jako např. platnost ukazatele v paměti) a může proto nesprávným použitím funkcí dojít ke zhroucení programu, případně až k vážnému poškození dat. Podrobné popisy k systémovým funkcím Windows API SDK je možné získat z internetových stránek Microsoft (www.microsoft.com) v oddělení pro vývojáře.

 

bm196 načtení knihovny

 

Parametrem funkce je jméno souboru knihovny DLL (včetně přípony). Funkce zajistí načtení knihovny do paměti a navrátí číselný identifikátor knihovny. Není-li knihovna nalezena, je navráceno číslo 0. K načtení knihovny je využita systémová funkce LoadLibrary , navrácené číslo odpovídá handle načteného modulu.

 

bm197 uvolnění knihovny

 

Funkce uvolní z paměti knihovnu, jejíž identifikační číslo je zadáno jako parametr funkce. Je povoleno zadání neplatného čísla 0. K uvolnění knihovny je použita systémová funkce FreeLibrary , zadané číslo odpovídá handle modulu.

 

bm198 importování funkce

  bm199 identifikátor knihovny

  bm200 jméno funkce

  bm201 počet parametrů

  bm202 volací konvence C

 

Funkce importování funkce slouží k vyhledání funkce v knihovně. Je využita systémová funkce GetProcAddress . Jako první parametr se zadává identifikační číslo knihovny načtené v paměti (je povoleno zadání neplatného čísla 0). Druhým parametrem je jméno funkce (text). Není-li zadaná funkce nalezena, je proveden druhý pokus - ke jménu funkce je přidáno písmeno "A" (varianta pro 8-bitové textové parametry). Třetím parametrem je počet parametrů funkce (je kontrolován počet parametrů v rozsahu 0 až 65k). Bez zadání se uvažuje počet parametrů 0 . Jedním parametrem se přitom rozumí jedna položka v zásobníku o velikosti 4 bajty (tj. dvouslovo). Poslední parametr je logický příznak udávající, že funkce je volána podle konvence C, tj. po návratu z funkce jsou zrušeny parametry ze zásobníku. Tato volací konvence je využívána např. u funkce printf a u dalších funkcí s proměnlivým počtem parametrů. Všechny ostatní funkce používají volací konvenci Pascal, tj. o zrušení parametrů ze zásobníku se stará volaná funkce (implicitní nastavení). Je-li funkce nalezena, je navrácen paměťový blok se strukturou popsanou dále. Při ukončení programu je nutno tento blok zrušit funkcí pro uvolnění paměťového bloku. Není-li funkce nalezena, je navráceno číslo 0. Všechny parametry funkce jsou při vytvoření paměťového bloku automaticky vynulovány.

 

bm203 provedení funkce

 

Prvek provedení funkce zajistí vyvolání a provedení funkce knihovny DLL. Jako parametr prvku se zadává adresa paměťového bloku navráceného předešlou funkcí pro importování funkce. Jedná se o běžný paměťový blok, který lze vytvářet, modifikovat či rušit operacemi pro obsluhu paměťových bloků. Lze si např. připravit několik paměťových bloků pro různé způsoby volání jedné funkce. Paměťový blok pro volání funkce má následující strukturu:

 

(4 bajty) adresa volané funkce

(2 bajty) N počet parametrů funkce (1 parametr je 4 bajtová položka v zásobníku)

(2 bajty) pomocné příznaky: je-li nastaven bit 0 , je použita volací konvence C (po návratu z funkce jsou zrušeny parametry ze zásobníku) jinak se použije volací konvence Pascal (o zrušení parametrů ze zásobníku se stará volaná funkce)

(N * 4 bajtů) N parametrů funkce, první parametr je při volání funkce uložen na nejnižší adrese zásobníku

 

Před voláním funkce je nutno nastavit parametry funkce. Implicitně jsou všechny parametry při importování funkce inicializovány na nulu. Nastavení parametrů se provádí pomocí následujících operací pro manipulaci s paměťovými bloky. První parametr je umístěn na offsetu 8 od začátku paměťového bloku. Každý parametr je 4-bajtové číslo (dvouslovo). Pozor na předávání textového parametru - parametrem u převážné většiny funkcí je ukazatel na ASCIIZ text, ne přímo text samotný. Prvek pro provedení funkce může být použit buď jako příkaz nebo jako funkce navracející číselný parametr.

 

bm204 vytvoření paměťového bloku

 

Jako parametr prvku se zadává požadovaná velikost paměťového bloku. Prvek navrací adresu paměťového bloku. Při ukončení programu je nutno paměťový blok zrušit následující funkcí pro uvolnění paměťového bloku. Paměťové bloky do velikosti 4 KB jsou obsluhovány vnitřní efektivní obsluhou systému Petr, která zajišťuje rychlé vytváření bloků, modifikaci velikosti i rušení. Pro paměťové bloky o velikosti nad 4 KB je využita systémová funkce HeapAlloc se zarovnáváním bloků na hranici 256 bajtů.

 

bm205 uvolnění paměťového bloku

 

Prvek zajistí zrušení paměťového bloku, jehož adresa je zadána jako parametr. Je povoleno zadání neplatné adresy 0.

 

bm206 změna velikosti paměťového bloku

  bm207 adresa paměťového bloku

  bm208 nová velikost

 

Funkce zajistí změnu velikosti pamětového bloku. Prvním parametrem je adresa paměťového bloku, jehož velikost má být změněna. Zadáním nuly dojde k vytvoření nového paměťového bloku. Druhým parametrem je nová velikost paměťového bloku. Zadáním nuly dojde ke zrušení paměťového bloku. Funkce navrací adresu nového paměťového bloku. Díky vnitřní optimalizaci může být paměťový blok nezměněn (je navrácena stejná adresa bloku). Nevyhovuje-li velikost paměťového bloku, vytvoří funkce nový blok s požadovanou velikostí a obsah starého bloku do něj překopíruje.

 

bm209 ukazatel čtení

bm210 ukazatel zápisu

 

Prvky ukazatel čtení a ukazatel zápisu slouží k nastavení adresy v paměti, odkud nebo kam se budou ukládat data následujícími prvky pro čtení/zápis dat. Čtením hodnoty některého z následujících prvků dojde k posunu ukazatele čtení, zápisem hodnoty do prvku dojde k posunu ukazatele zápisu. Ukazatele čtení a zápisu nejsou nijak kontrolovány na platnost. Nesprávnou manipulací může dojít k nežádoucí modifikaci paměti systému nebo programu.

 

bm211 kopie dat

 

Prvek kopie dat zajistí kopírování bloku dat z adresy nastavené ukazatelem čtení na adresu udanou ukazatelem zápisu. Velikost dat je zadána jako parametr prvku. Ukazatele čtení i zápisu se operací posunou o zadanou velikost dat.

 

bm212 porovnání dat

 

Prvek porovnání dat zajistí porovnání bloku dat mezi adresou nastavenou ukazatelem čtení a adresou udanou ukazatelem zápisu. Velikost dat je zadána jako parametr prvku. Je-li nalezen rozdíl mezi daty, navrací prvek velikost zbývajících dat a ukazatele čtení a zápisu zůstanou nastavené na odlišných datech. Jsou-li data shodná, navrátí prvek nulu a ukazatele čtení a zápisu jsou nastaveny za koncem dat.

 

bm213 bajt se znaménkem (char) (posun ukazatele o 1)

bm214 bajt bez znaménka (BYTE) (posun ukazatele o 1)

bm215 slovo se znaménkem (short) (posun ukazatele o 2)

bm216 slovo bez znaménka (WORD) (posun ukazatele o 2)

bm217 3-bajt se znaménkem (posun ukazatele o 3)

bm218 3-bajt bez znaménka (posun ukazatele o 3)

bm219 dvouslovo se znaménkem (long) (posun ukazatele o 4)

bm220 dvouslovo bez znaménka (DWORD) (posun ukazatele o 4)

bm221 reálné číslo 4 bajty (float) (posun ukazatele o 4)

bm222 reálné číslo 8 bajtů (double) (posun ukazatele o 8)

bm223 logická hodnota (BOOL) (posun ukazatele o 4)

bm224 text zakončený nulou ASCIIZ (posun ukazatele o N+1)

bm225 ukazatel na text zakončený nulou ASCIIZ (posun ukazatele o 4)

bm226 text s pevnou délkou (posun ukazatele o N, kratší text doplněn mezerami)

bm227 délka textu s pevnou délkou N (nutno nastavit před použitím předešlého prvku)

 

Pomocí prvků pro přístup k datům lze číst nebo zapisovat do paměti. Čtením prvku je načtena hodnota z paměti, jejíž adresa je udána pomocí ukazatele čtení. Ukazatel čtení se posune o velikost prvku. Nastavením hodnoty prvku se hodnota uloží do paměti na adresu udanou ukazatelem zápisu. Ukazatel zápisu se posune o velikost prvku. U textových prvků jsou použity 8-bitové znaky. Je-li vyžadován text v kódu UNICODE, je nutná konverze textu pomocí systémových funkcí MultiByteToWideChar a WideCharToMultiByte . U převážné většiny funkcí Windows se předává jako parametr ukazatel na text zakončený nulou (typ parametru LPCTSTR ) namísto textu samotného. Je-li prvek pro nastavení ukazatele na text zakončený nulou použit, nesmí být obsah použité textové proměnné až do chvíle vyvolání funkce DLL modifikován, jinak se může ukazatel stát neplatným (je předán pouze ukazatel na obsah textové proměnné).

 

bm228 čtení dat ze souboru

bm229 zápis dat do souboru

 

Prvky čtení dat ze souboru a zápis dat do souboru slouží ke čtení/zápisu bloku dat z/do souboru. Jako parametr prvku se zadává velikost dat ke čtení/zápisu. Paměťové ukazatele čtení a zápisu ukazují na data v paměti, souborové ukazatele ukazují na data v souboru.

 

bm230 identifikátor okenního prvku

 

Prvek překonvertovává identifikační číslo okenního prvku systému Petr na identifikační číslo Windows (HWND). Pro neplatný prvek je navrácena nula.

 

bm231 vytvoření 3D objektu z paměťových bloků

  bm232 počet vrcholů

  bm233 vrcholy

  bm234 normály (0=auto)

  bm235 mapování textur (0=není)

  bm236 barvy (0=nejsou)

  bm237 počet plošek

  bm238 plošky

 

Prvek slouží k rychlému a efektivnímu vytvoření 3D objektu 3D grafiky např. pomocí výpočtu. Prvek navrací identifikační číslo vytvořeného objektu.

 

Jako první parametr je uveden počet vrcholů objektu. Druhým parametrem je adresa paměťového bloku, obsahujícího souřadnice jednotlivých vrcholů. Každý vrchol je určen pomocí 3 reálných 4-bajtových čísel představujících souřadnice X, Y a Z vrcholu.

 

Třetím parametrem je adresa paměťového bloku obsahujícího normály. Tento parametr může být buď neuveden nebo uvedena 0, v tom případě budou normály objektu vygenerovány automaticky s úhlem pro zjemnění 0.5. Jsou-li normály použity, musí jejich počet odpovídat počtu vrcholů. Normály jsou zadány stejným způsobem jako vrcholy (3 reálná 4-bajtová čísla).

 

Čtvrtým parametrem je adresa paměťového bloku obsahujícího definice mapování textur. Pro každý vrchol objektu je zadána dvojice reálných 4-bajtových čísel představujících horizontální a vertikální souřadnici bodu v textuře. Levý horní roh textury má souřadnici (0,0), pravý dolní roh souřadnici (1,1). Není-li potřeba mapování textury používat, lze parametr vynechat nebo uvést 0.

 

Pátým parametrem je adresa paměťového bloku obsahujícího definice barev jednotlivých vrcholů objektu. Barva pro každý vrchol je zadána jako 4 reálná 4-bajtová čísla představující barevné složky RGBA v pořadí červená, zelená, modrá a alfa složka. Každá ze složek má rozsah 0 (=černá) až 1 (=plný jas), hodnota 0 pro alfa složku představuje průhlednost a 1 plnou viditelnost. Počet barev musí souhlasit s počtem vrcholů objektu. Nejsou-li definice barev požadovány, lze namísto adresy zadat 0 nebo parametr vynechat, použije se jednotná barva pro celý objekt.

 

Šestý parametr udává počet trojúhelníkových plošek, ze kterých je objekt sestaven. Sedmým parametrem je adresa paměťového bloku obsahujícího definice jednotlivých plošek objektu. Každá z plošek je trojúhelník o 3 vrcholech. Jedna ploška je určena 3 celočíselnými 4-bajtovými čísly bez znaménka představujícími indexy vrcholů. Jeden vrchol může být sdílen více ploškami.

 

bm239 paměťový blok z 3D objektu

 

Prvek umožňuje zpřístupnění definice 3D objektu 3D grafiky pro účely exportování objektu nebo vytvoření modifikované verze objektu. Parametrem prvku je identifikační číslo objektu.

 

Prvek navrací adresu paměťového bloku obsahujícího definici objektu. Tento paměťový blok má velikost 32 bajtů a obsahuje osum 4-bajtových celočíselných položek bez znaménka. Význam jednotlivých položek odpovídá popisu předešlého prvku vytvoření 3D objektu z paměťových bloků .

 

offset 0:         parametry, nyní rezervováno a nastaveno na 0

offset 4:         počet vrcholů objektu

offset 8:         adresa paměťového bloku obsahujícího souřadnice vrcholů

offset 12:         adresa paměťového bloku obsahujícího normály

offset 16:         adresa paměťového bloku obsahujícího mapování textur (0=není)

offset 20:         adresa paměťového bloku obsahujícího barvy vrcholů (0=není)

offset 24:         počet plošek objektu

offset 28:         adresa paměťového bloku obsahujícího definice plošek

 

Důležité: Navrácený paměťový blok s definicí objektu stejně jako jednotlivé paměťové bloky s daty jsou nově vytvořené a musí být proto po ukončení práce s daty zrušeny.