vorgehensweise



  • 1.is das die standard vorgehensweise c++ vorzugaukeln zwei objekte gleichen typs wärn unterschiedlich oder gibts auch ne hübschere?

    #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
    DECLARE_HANDLE (HWND);

    2. kann mir jemand den zweck des untenstehenden codes erklärn?
    dass bei unicode die eine funktion benutzt wird und sonst die andere seh ich auch
    aber wann is das der fall(auf welchen systemen) und warum

    WINGDIAPI int WINAPI GetObjectA( IN HGDIOBJ, IN int, OUT LPVOID);
    WINGDIAPI int WINAPI GetObjectW( IN HGDIOBJ, IN int, OUT LPVOID);
    #ifdef UNICODE
    #define GetObject GetObjectW
    #else
    #define GetObject GetObjectA
    #endif // !UNICODE

    gruss sov



  • Sovok schrieb:

    1.is das die standard vorgehensweise c++ vorzugaukeln zwei objekte gleichen typs wärn unterschiedlich oder gibts auch ne hübschere?

    #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
    DECLARE_HANDLE (HWND);
    

    Naja, standardkonform ist das nicht, aber nur wegen der 2 Unterstriche. Ansonsten könntest du mit Standardvorgehensweise auch meinen, dass das oft angewendent wird? IMHO ist das Problem nicht so da, ein simples typedef müsste es auch tun. Wenn man panische Angst vor Typfehlern hat, weil man vielleicht ständig Fensterhandles an Socketfunktionen übergibt oder so, dann braucht man einen neuen Typ, und da ist sowas wie DECLARE_HANDLE aber gar nicht übel.

    Allerdings fürchte ich, dass die Windows-Funktionen intern von einem int ausgehen, und damit Layout-Kompatibilität zwischen struct { int unused; } und int annehmen. Das ist ebenfalls nicht standardkonform.

    dass bei unicode die eine funktion benutzt wird und sonst die andere seh ich auch
    aber wann is das der fall(auf welchen systemen) und warum

    #ifdef UNICODE

    Wenn irgendwo ein #define UNICODE steht, wird die Unicode-Variante benutzt. Kannst auch normalerweise als Compileroption mitgeben, beim gcc z.B. -DUNICODE

    Darüber steht was im Petzold Kapitel 3 (oder so).



  • zu 1 mit typedefs bekommt man aber dann bei überladenen methoden probleme
    zu 2 schon klar... die frage is eher "warum"



  • 1. Gibts in der WINAPI Überladung? Handles sind was für die Kommunikation mit dem OS, nichts, was man in eigenen Programmen verwendet.

    2. Dann versteh ich die Frage nicht.



  • zu 1. es geht mir ned um winapi
    ich such den besten weg für die erstellung von eigenen handles und frag mich ob ich den winapi ansatz übernehmen soll

    zu 2. warum muss man überhaupt zwischen unicode und sonstwas unterscheiden?



  • 1. Keine Ahnung, ich kann mir nicht vorstellen, wozu man Handles brauchen sollte. Das widerspricht irgendwo einem OO-Ansatz. Vielleicht weiß jemand anders mehr dazu.

    2. Ich versteh die Frage glaub ich immer noch nicht. Unicode benötigt aufgrund des größeren Zeichenvorrats offensichtlich einen anderen Datentyp als char (nämlich wchar_t), folglich funktionieren die Funktionen, die auf char basieren, nicht.



  • zu 1:
    naja bei manchen dlls will ich ned immer gleich ganze klassen exportiern

    zu 2:
    ok nochmal ganz simpel 😉
    es wir zur kompilierzeit entschieden ob unicode oder nich. d.h. ein unicode programm läuft wohl nich auf nem nicht unicode rechner
    aber auf welchen rechnern läuft denn nu welches?



  • Das steht eigentlich auch im Petzold, AFAIR. Win9x kann nur normal, NT kann beides (läuft intern aber rein über Unicode).



  • d.h. wenn ich sicher sein will soll ich GetObjectA benutzen
    thx... war eigentlich alles was ich wissen wollte 😉


Anmelden zum Antworten