Jak się robi biblioteki? (takie jak WinAPI)

0

Witam,
od pewnego czasu nurtuje mnie pewne pytanie.
Jak robi się biblioteki takie jak Qt, DirectX, WinAPI? Jak te biblioteki rysują po ekranie? Z czego korzystają?

0

przewaznie to sie je pisze a korzystaja ze sterownikow lub wyzszych warstw (jak qt) ktore korzystaja z kart graficznych :P

0

Wymieniles wlasnie rozne warstwy oprogramowania. Zaczynajac od gory systemu czyli aplikacji:

  1. Aplikacja chce narysowac bitmape przycisku (np.: Twoja aplikacja).
  2. Aplikacja wywoluje odpowiednia funkcje z biblioteki (np.: Qt) lub bezposrednio z interfejsu programowania aplikacji danego systemu operacyjnego.
  3. Biblioteka wywoluje odpowiednia funkcje interfejsu programowania systemu operacyjnego (np.: Winapi).
  4. Biblioteki interfejsu programowania systemu operacyjnego poprzez jadro systemu komunikuja sie ze sterownikiem urzadzenia.
  5. Sterownik urzadzenia (bezposrednio lub przez inne urzadzenie [DMA] albo przez procesor [PIO]) wysyla dane pod okreslony adres pamieci, pod ktorym zmapowane jest urzadzenie.

Z DirectX/OpenGL jest inaczej, poniewaz celem tych bibliotek jest wydajnosc, obie zapewniaja komunikacje bez posrednictwa Winapi, ale w zamian za to wymagaja sterownikow wspierajacych te technologie. Urzadzenia wspieraja wspolczesnie wysokopoziomowe operacje (np.: do wspolczesnej karty graficznej obslugujacej DirectX mozna wyslac wprost rozkaz: w takim kontekscie renderowania, z takimi ustawieniami, wyrenderuj trojkat z takiego strumienia wierzcholkow).

Jak sie robi takie biblioteki? Powyzej Winapi jest to proste, bo jest to zwykla biblioteka lub aplikacja udostepniajaca jakies funkcje (sama operujaca na funkcjach Winapi). Aby napisac interfejs programowania aplikacji dla systemu operacyjnego (tu: Winapi oraz DirectX), wlasciwie musisz tworzyc system operacyjny albo przynajmniej znac doskonale, jaki niskopoziomowy zestaw instrukcji do komunikacji z urzadzeniami (lub sterownikami) udostepnia jadro systemu. Tutaj tez musisz wiedziec (lub miec wplyw na to), jakie funkcje udostepnia sprzet i jego sterowniki.

Podsumowujac:

  • do tworzenia aplikacji w danym systemie operacyjnym wystarczy Ci typowy dla systemu jezyk ogolnego przenaczenia.
  • do tworzenia biblioteki ponad interfejsem programowania aplikacji systemu operacyjnego tak samo wystarczy Ci taki sam jezyk ogolnego przenaczenia.
  • do tworzenia interfejsu programowania aplikacji systemu operacyjnego, potrzebujesz jezyka, bedacego w stanie komunikowac sie z jadrem systemu operacyjnego lub jego istniejacymi bibliotekami.
  • do tworzenia jadra systemu operacyjnego poczytaj jakis OS Dev.
  • do tworzenia sterownikow czesto potrzebujesz jezyka, bedacego w stanie komunikowac sie z jadrem systemu operacyjnego (prawie zawsze ogranicza sie to do znalezienia bibliotek, naglowkow lub DDK [Driver Development Kit] dla danego systemu operacyjnego.

To tak w skrocie z duzymi uogolnieniami.

0

Aha, czyli tamte funkcje są podobne do np. takiej?

void print(unsigned char *str, unsigned char color)
{
  unsigned char *vga = (unsigned char *)0xb8000; //wskaznik do pamieci ekranu

  while(*str != 0)        //dopoki nie napotkamy na koniec - #0
  {
    *vga = *str;          //zapisz znak
    *(vga + 1) = color;   //zapisz kolor
    str++;                //nastepny znak
    vga += 2;             //jak wyzej (znaki w pamieci ekranu maja 2 bajty)
  }
}
0
hck napisał(a)

Aha, czyli tamte funkcje są podobne do np. takiej?

lata nauki przed toba :P

0

Źle to napisałem :P
I nie wiem jak to napisać, ale generalnie chodzi o to, czy tamto też ma te jakieś wskaźniki do pamięci itp. :D

0
hck napisał(a)

Źle to napisałem :P
I nie wiem jak to napisać, ale generalnie chodzi o to, czy tamto też ma te jakieś wskaźniki do pamięci itp. :D

jezeli cos jest pisane w c/c++ to pewnie ma ;p
tylko kodu duzych projektow nie pisze sie od tak z d**y jak twoj przyklad tylko z wykorzystaniem inzynierii oprogramowania, nauka samego jezyka do wierzcholek gory lodowej :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1