Nakładka na WinAPI

0

Witam

Chcę napisać sobie bibliotekę nakładkę na WinAPI i mam parę pytań.

  1. Czy nagłówek Windows.h wywołuje funkcję biblioteki statycznej, która to dopiero wywołuje funkcję z systemowych .dll?
  2. Jeśli odpowiedź na 1) jest nie, to po co dołączać do projektu pliki .lib jak wszystko jest w plikach .dll?
  3. Czy biblioteki takie jak GTK+, Qt itp. dołączają Windows.h i wywołują jego funkcję czy programiści tych bibliotek napisali sobie sami typedef do funkcji z .dll.
  4. Skąd bierze się hInstance w bibliotekach GTK+, Qt itp. jak nie mają WinMain tylko zwykłe main(int argc, char *argv[])? Czy może hInctance itp. są przekazywane przez argv[]?
  5. Czym tak naprawdę jest WinMain? Przecież każdy program musi mieć main, a bez niego to w Oknach jakoś działa, kompilatory mają to zaimplementowane czy nagłówki WinAPI takie cudy robią?

Nie wiem czy jest dobry dział, ale programowanie nakładek na WinAPI, można "podciągnąć" pod wiele języków. Ze swojej biblioteki nie chce nie wiadomo jakich cudów. To tylko w ramach nauki C++ itd. :)

1

Może poproś admina o przeniesienie do działu C/C++ - w końcu WinApi to C.
Szkoda, że nikt się nie zainteresował wątkiem, bo sam jestem ciekaw odpowiedzi na te pytania, przynajmniej na część ;-).
No cóż, może się ktoś jeszcze skusi ;-P

4
  1. Czy nagłówek Windows.h wywołuje funkcję biblioteki statycznej, która to dopiero wywołuje funkcję z systemowych .dll?
    Nie, funkcje systemowe WinAPI są w bibliotekach dynamicznych (DLL), nie statycznych (LIB).
  1. Jeśli odpowiedź na 1) jest nie, to po co dołączać do projektu pliki .lib jak wszystko jest w plikach .dll?
    To charakterystyczne dla C i C++, że nie podaje się w kodzie że w takiej a takiej DLL-ce jest dana funkcja, tylko kod zawiera sam nagłówek funkcji, a informację gdzie taka funkcja jest podaje się linkerowi w pliku .lib.
    Taka libka (biblioteka importowa) nie zawiera kodu funkcji, a tylko informację (jakby przekierowanie) że funkcja jest w zewnętrznej bibliotece ładowanej dynamicznie.
  1. Czy biblioteki takie jak GTK+, Qt itp. dołączają Windows.h i wywołują jego funkcję czy programiści tych bibliotek napisali sobie sami typedef do funkcji z .dll.
    To bez różnicy, ale raczej dołączają windows.h. Po co mieliby pisać od nowa coś co jest.
  1. Skąd bierze się hInstance w bibliotekach GTK+, Qt itp. jak nie mają WinMain
HMODULE hInstance = GetModuleHandle(NULL);
  1. Czym tak naprawdę jest WinMain
    Punktem wejścia (entry point) programu okienkowego...

Przecież każdy program musi mieć main,
Tak mówią standardy C i C++, ale przecież nie standardem się kompiluje programy...

kompilatory mają to zaimplementowane czy nagłówki WinAPI takie cudy robią?
Kompilatory mają zaimplementowane.
Biblioteki o których mówisz (Qt) w których mimo wszystko używa się main najprawdopodobniej implementują WinMain wewnętrznie, i ten WinMain wywołuje main użytkownika.

0
bajos napisał(a)

a jak ktoś kompiluje w g++? ;D To chyba trzeba powiadomić kompilator -e(nazwa)?

Dlaczego nie sprawdzisz?

0
  1. Przeczytałem gdzieś, że typ HINSTANCE to 4-bajtowa liczba i jest to identyfikator programu nadany przez kernel. Ten typ jest typem unsigned czy signed? Jeśli to liczba 4-bajtowa to myślę, że można ją zastąpić typem long int?
1

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx

typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HINSTANCE;

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