Systémové programování Windows Úvod Obsah  Představení / kontakty  Náplň  Organizace  Domácí úkoly  Podmínky splnění  Windows API  Unicode Představení/kontakty  Vyučující: Roman Štěpánek  roman.stepanek@gmail.com  Materiály:  Roman Štěpánek  Andrea Číková (podzim 2011)  Martin Osovský (podzim 2011) Náplň  Změření na programování ve Windows.  Budeme se vyhýbat oblastem, které se v jiných jazycích (C#) dělají lépe. Což nás omezí hlavně na používání Windows API.  Během výuky se dozvíte něco málo o architektuře Windows. Organizace  Výuka se koná každý týden (středa 10:00 - 11:40).  Účast na cvičení je povinná.  Během semestru bude zadáno minimálně 10 samostatných úloh (1 úloha = max. 10 bodů).  Čas na vypracování a odevzdání úlohy bude do následujícího úterý do 20:00 (pokud nebude uvedeno jinak). Domácí úkoly  Hodnocení  funkčnost,  kontrolování návratových hodnot,  rušení zdrojů (handle, paměť),  přehlednost, komentáře.  Prémiové úkoly  Možnost opravy (max. 7 bodů) Podmínky splnění  Max. 2 neomluvené neúčasti.  Min. 70 bodů ze samostatných úkolů. Windows API  Množina funkcí dostupných v o. s.Windows  Funkce jsou implementované v .dll souborech (kernel32.dll, user32.dll apod.)  Funkce probíhají v user space.  Pokud je potřeba část vykonat kernel space – vyvolá se služba systému  Pokud je potřeba část vykonat v procese subsystému (csrss.exe)  32 x 64 Základní principy  Funkce jsou deklarovány v hlavičkových souborech (viz msdn)  Např. #include “windows.h“  Windows API povětšinou zprostředkovává objekty jádra pomocí referenčních objektů – HANDLE. HANDLE je potřeba po ukončení práce zavřít.  Např. soubor, proces, vlákno. Základní principy  Správa chyb  Je nutné kontrolovat návratové hodnoty.  Neexistuje jednotný přístup pro správu.  DWORD WINAPI GetLastError(void);  Typy jsou pojmenovány velkými písmeny (existují i ekvivalenty standardních typů)  Např. BOOL, HANDLE, DWORD Unicode  Nastavení projektu nebo #define UNICODE  TCHAR, _T(“text”)  Dvě verze funkcí (A a W) #ifdef UNICODE #define CreateWindowEx CreateWindowExW #else #define CreateWindowEx CreateWindowExA #endif Díky za pozornost