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.
 
Image bm196.GIF 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.
 
Image bm197.GIF 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.
 
Image bm198.GIF importování funkce
Image bm199.GIF identifikátor knihovny
Image bm200.GIF jméno funkce
Image bm201.GIF počet parametrů
Image bm202.GIF 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.
 
Image bm203.GIF 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.
 
Image bm204.GIF 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ů.
 
Image bm205.GIF 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.
 
Image bm206.GIF změna velikosti paměťového bloku
Image bm207.GIF adresa paměťového bloku
Image bm208.GIF 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.
 
Image bm209.GIF ukazatel čtení
Image bm210.GIF 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.
 
Image bm211.GIF 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.
 
Image bm212.GIF 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.
 
Image bm213.GIF bajt se znaménkem (char) (posun ukazatele o 1)
Image bm214.GIF bajt bez znaménka (BYTE) (posun ukazatele o 1)
Image bm215.GIF slovo se znaménkem (short) (posun ukazatele o 2)
Image bm216.GIF slovo bez znaménka (WORD) (posun ukazatele o 2)
Image bm217.GIF 3-bajt se znaménkem (posun ukazatele o 3)
Image bm218.GIF 3-bajt bez znaménka (posun ukazatele o 3)
Image bm219.GIF dvouslovo se znaménkem (long) (posun ukazatele o 4)
Image bm220.GIF dvouslovo bez znaménka (DWORD) (posun ukazatele o 4)
Image bm221.GIF reálné číslo 4 bajty (float) (posun ukazatele o 4)
Image bm222.GIF reálné číslo 8 bajtů (double) (posun ukazatele o 8)
Image bm223.GIF logická hodnota (BOOL) (posun ukazatele o 4)
Image bm224.GIF text zakončený nulou ASCIIZ (posun ukazatele o N+1)
Image bm225.GIF ukazatel na text zakončený nulou ASCIIZ (posun ukazatele o 4)
Image bm226.GIF text s pevnou délkou (posun ukazatele o N, kratší text doplněn mezerami)
Image bm227.GIF 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é).
 
Image bm228.GIF čtení dat ze souboru
Image bm229.GIF 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.
 
Image bm230.GIF 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.
 
Image bm231.GIF vytvoření 3D objektu z paměťových bloků
Image bm232.GIF počet vrcholů
Image bm233.GIF vrcholy
Image bm234.GIF normály (0=auto)
Image bm235.GIF mapování textur (0=není)
Image bm236.GIF barvy (0=nejsou)
Image bm237.GIF počet plošek
Image bm238.GIF 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.
 
Image bm239.GIF 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.

Plný html kontextový help Petra - Gemtree Software & Dětské programování
Full Html Context Help of The Peter - Gemtree Software & Children Programming