define von HMODULE



  • hi,
    HMODULE ist in der windows.h als HINSTANCE definiert, wie ist HINSTANCE definiert? ist leider so ein komisches makro define...und mir ist nicht ersichtlich was es jetzt ist...ist es ein void pointer?

    wie ist SOCKET definiert? als unsigned int pointer?

    cu



  • Wie das definiert ist, braucht dich eigentlich gar nicht zu interessieren. Ein HINSTANCE oder HMODULE ist einfach eine ID, anhand derer das Betriebssystem ein bestimmtes Modul wiederfinden kann. Punkt.

    (was da im Hintergrund passiert, ist Sache des Systems)


  • Mod

    Als Zusatz:
    Alle Handles sind typensicher definiert. Im Endeffekt sind sie eine irgendwie geartete Zahl oder eben Id. Diese wird aber als Zeiger auf einen fiktiven Typ deklariert. Dadurch kann man diese nicht gegenseitig zuordnen und dies schützt vor Verwechselung und dummen Programmiererfehlern.

    Geschichtlich:
    In den ersten SDK's von Windows 3.0 war ein Handle ein WORD!
    Und man konnte HINSTANCE, HWND's und Konsorten lustig untereinander tauschen.
    Das hat sich erst mit der STRICT Einführung (IMHO Windows 3.1 SDK geändert).



  • Wers wissen will: Die Handles sind alle Zeiger auf unterschiedliche Strukturen/Klassen. Deshalb sind sie auch typsicher. Die Strukturen/Klassen kann man aber nicht benutzen, haben nur Dummy-Funktion :xmas1:

    Edit: Typsicher wird natürlich klein geschrieben 😉



  • std::cout << (typeid(HINSTANCE)).name() << std::endl;
    std::cout << (typeid(SOCKET)).name() << std::endl;
    
    so bekomme ich:
    struct HINSTANCE__ *
    unsigned int
    

    kann man irgendwie sehen wie die struct HINSTANCE__ aufgebaut ist?



  • Wie gesagt, die struct ist nur aus Dummy-Zwecken da. Damit kannst du (leider) nicht sehen, wie die HINSTANCE von Windows verwaltet wird und da für Member hat.
    Ich glaube die struct dürfte ungefähr so aussehen:

    struct HINSTANCE__
    {
         int unused;
    };
    

  • Mod

    @cpp1: Nein! Du kannst nicht mal davon ausgehen, dass HINSTANCE wirklich ein Zeiger ist (In diesem Fal ist er es) aber grundsätzlich kann man HANDLES nicht als Zeiger betrachten! Es sind elementare IDs!



  • ich habe gerade eine statische Lib erstellt mit Visual Studio 2005,
    hab da eine header und ein .c file! wenn ich nun windows.h in der header includiere dann wird die
    Lib 100KB groesser! wenn die windows.h in der .c includiere wird die Lib aber nicht groesser...
    warum das?

    cu


Anmelden zum Antworten