Was in Dreiteufelsnamen hat sich Micorsoft dabei gedacht?



  • Der Titel ist zwar wenig informativ, dafür geht im Beitrag die Post ab. Ich habe mir mal die <WinUser.h>, die <WinDef.h> und die <WinNT.h> - Dateien von der Sammlung meiner API - Funktionen angesehen, und ich glaube nicht, was ich da gesehen habe. Deshalb kommt jetzt mal eine Fragensammlung a'la "Was hat sich Micorsoft dabei wohl gedacht?"

    1.Warum gibt es 4 Definierungen für <__stdcall>? Ich habe vier gefunden, nämlich: <CALLBACK>, <WINAPI>, <APIENTRY> und <APIPRIVATE>. WARUM? <__sdtcall> reicht doch völlig.

    2.Was ist überhaupt der Unterschied zwischen __sdtcall und _sdtcall? Was gewirkt der fehlende Strich? Und wenn wir schon einmal dabei sind, das gleiche für __forceinline & _forceinline und für __asm & _asm.

    3.Jau, was bewirkten überhaupt diese sinnlosen Definitionen? Beispiel:

    #define near       //Kein Wert.
    #define far        //Kein Wert.
    //(...)
    #define NEAR near  //NEAR soll also durch near ersetzt werden, das ... nichts ersetzt?
    #define FAR far    //Hier ebenso.
    

    Ich verstehe die Welt nicht mehr. Warum? Warum, Warum?

    4.Meiner Meinung nach der absoulute Hammer: In Windows wird für ein <bool>, dass ein Byte Speicher verbraucht, ein <BOOL>, das eigentlich ein Integer ist und auf 32-Bitsystemen 4 Byte braucht. FALSE und TRUE ist dann der offizielle Wertebereich, aber man verbraucht 3 Byte Speicher. Ich habe keine Zwangsneurose, aber wozu blässt man 3 Bytes in den Wind?

    Jetzt kommen ein paar interesantere Fragen:

    1.Wie schaffe ich es, das "nächste Zeile"-Zeichen '\0' in einen wchar_t-String zu packen? Ich habe nämlich folgendes Problem:

    LRESULT WndProc(HWND hWnd,UINT uiMessage,LARAM lParam,WPARAM wParam)
    {
        HDC DC=GetDC(hWnd);
        switch(uiMessage)
        {
        case WM_LBUTTONDOWN:
            TextOut(DC,150,0,"Die linke Maustaste\nwurde bewegt!",,strlen("Die linke Maustaste\nwurde bewegt!"));//Ich habe eine überladene Funktion für wchar_t-Strings geschrieben, die man aber nicht einsehen muss.
            return 0;
        }
    }
    

    Doch wenn ich das Programm starte, erscheint statt eine neue Zeile ein | oder l.

    2.Was macht die Funktion <UpdateWindows()>?

    3.Welche initialisierungen der Variablen von Objekten der Struktur WNDCLASSEX sind zwingend notwendig, damit das Fenster erscheint?

    4.Welche pragma-Anweisungen gibt es für Microsoft Visual C++ 2008 Express Edition, und was bewirken sie (ich komme mit der fehlerhaften Hilfe des Compilers nicht zurecht).

    5.Was ganau bewirkt eigentlich <__stdcall>?

    6.Wie kriege ich es hin, dass in einem Fenster die "normale" graue Dialogfeldfarbe als Füllbitmap verwendet wird? Beispiel:

    WNDCLASSEX WinClassEx;
    //(...)
    WinClassEx.hbrBackground=(HBRUSH)(???);//Welche Farbe?
    

    7.Ein Problem mit meinem Compiler. Es ist nicht mehr möglich, korrekt .c/.cpp und .h/.hpp - Dateien herzustellen, sondern lediglich nur "Komponentenklassen". Dateien muss ich manuell erstellen und einbinden. Es erscheinen noch nicht mal die Einträge für diese Dateien. Was ist da los?

    8.Gibt es vielleicht eine komplette Beschreibung aller API - Funktion, die downloadbar ist, und zwar für C? Google&Co bringen nur Mist.

    Danke im Voraus.



  • WinAPI gibts nicht erst seit gestern 🙄



  • '\0' ist NICHT das 'nächste Zeile - Zeichen'!
    TextOut kann keine Zeilenumbrüche.



  • Ok, ein paar Rechtschreibfehler sind mir reingekommen. Aber soweit ich das sehe, macht das keinen Unterschied. Also, ich meinte '\n'.

    Und was soll das

    WinAPI gibts nicht erst seit gestern 🙄

    ?



  • .......... schrieb:

    Ok, ein paar Rechtschreibfehler sind mir reingekommen. Aber soweit ich das sehe, macht das keinen Unterschied. Also, ich meinte '\n'.

    Trotzdem kann TextOut das nicht.



  • Solche Geschichten wie FARm usw. sind wohl aus Kompatibilitätsgründen da. Früher unter 16-Bit-Systemen gab es far pointer (32 Bit) und near pointer (16 Bit), soweit ich weiß. Der alte Code soll doch schließlich auch noch laufen.

    __stdcall ist wohl auf mehrere Makros definiert, um die Lesbarkeit zu erhöhen. Beispielsweise nimmst du CALLBACK ja nur für Callback-Funktionen. Lesbarer für dich.

    Windows (also die WinAPI) ist in C geschrieben. In C gibt es keinen Datentyp bool (in C99 schon, glaube ich, aber das gab es damals schleßlich noch nicht). Es gilt seit jeher die Regel, dass 0 false ist und alles andere true. Das hat man nunmal hier per #define in einen Pseudodatentyp gepackt. Warum man dann allerdings nicht einen 1-Byte-Typen genommen hat, weiß ich auch nicht.

    Wieso meinst du, dass die MS-Hilfe fehlerhaft ist? Beispiele? Klar findet man da auch Fehlerchen, wenn man das Internet danach durchforstet. Aber hast du selbst so schlimme Erfahrungen gemacht, dass du die Hilfe nicht mehr nutzen willst? Kann ich mir nicht vorstellen, ich kann damit wunderbar arbeiten...

    Zu 8.: Die hast du schon auf deinem Rechner. Und per Google findet man auch zu jeder Funktion eine Erklärung und ein vernünftiges Beispiel.



  • _matze schrieb:

    __stdcall ist wohl auf mehrere Makros definiert, um die Lesbarkeit zu erhöhen.

    nö, sondern damit man's austauschen kann. WINAPI und CALLBACK sind zwar aktuell das selbe, aber es kann sich irgendwann mal ändern bzw. war mal anders.
    🙂



  • _matze schrieb:

    Solche Geschichten wie FARm usw. sind wohl aus Kompatibilitätsgründen da. Früher unter 16-Bit-Systemen gab es far pointer (32 Bit) und near pointer (16 Bit), soweit ich weiß. Der alte Code soll doch schließlich auch noch laufen.

    Aha. Gut zu wissen.

    _matze schrieb:

    __stdcall ist wohl auf mehrere Makros definiert, um die Lesbarkeit zu erhöhen. Beispielsweise nimmst du CALLBACK ja nur für Callback-Funktionen. Lesbarer für dich.

    Nicht unbedingt. Ich finde es verwirrend und unübersichtlich, aber jeder hat eine andere Meinung.

    _matze schrieb:

    Windows (also die WinAPI) ist in C geschrieben. In C gibt es keinen Datentyp bool (in C99 schon, glaube ich, aber das gab es damals schleßlich noch nicht). Es gilt seit jeher die Regel, dass 0 false ist und alles andere true. Das hat man nunmal hier per #define in einen Pseudodatentyp gepackt. Warum man dann allerdings nicht einen 1-Byte-Typen genommen hat, weiß ich auch nicht.

    Ha, danke! Ich vergesse immer wieder, dass C++ (das, was ich gelernt habe), auf noch C als Mitbringsel hat (das, was ich NICHT gelernt habe).

    _matze schrieb:

    Wieso meinst du, dass die MS-Hilfe fehlerhaft ist? Beispiele? Klar findet man da auch Fehlerchen, wenn man das Internet danach durchforstet. Aber hast du selbst so schlimme Erfahrungen gemacht, dass du die Hilfe nicht mehr nutzen willst? Kann ich mir nicht vorstellen, ich kann damit wunderbar arbeiten...

    Tatsächlich! Ich wollte mal probeweise eine DLL schreiben, kam aber nicht mit der Erklärung vom Buch zurecht. Dann habe ich die Hilfe von Mircosoft angenommen, was zur Folge hatte, dass ich eine Mordswut auf Microsoft und die nicht funktionierende DLL hatte. Ne, vom der Microsofthilfe habe ich erstmal genug (und von DLLs ebenfalls, aber das ist irrelevant).

    _matze schrieb:

    Zu 8.: Die hast du schon auf deinem Rechner. Und per Google findet man auch zu jeder Funktion eine Erklärung und ein vernünftiges Beispiel.

    Nicht die API, sondern eine Beschreibung. Ein Ding, dass mir sagt, was ich alles realisieren kann. Sonst kann ich mir das Programmieren mit der MFC oder OWL gleich schenken. Und ich kann nicht wegen jedem Mist ins Internet gehen, weil ich zu Hause keinen Internetzugang habe.

    EDIT (Martin Richter): Quotes gefixed



  • .......... schrieb:

    Tatsächlich! Ich wollte mal probeweise eine DLL schreiben, kam aber nicht mit der Erklärung vom Buch zurecht. Dann habe ich die Hilfe von Mircosoft angenommen, was zur Folge hatte, dass ich eine Mordswut auf Microsoft und die nicht funktionierende DLL hatte.

    Auf das Buch nicht?



  • Belli schrieb:

    .......... schrieb:

    Tatsächlich! Ich wollte mal probeweise eine DLL schreiben, kam aber nicht mit der Erklärung vom Buch zurecht. Dann habe ich die Hilfe von Mircosoft angenommen, was zur Folge hatte, dass ich eine Mordswut auf Microsoft und die nicht funktionierende DLL hatte.

    Auf das Buch nicht?

    Ich hoffe, das war ein Scherz! Natürlich war ich auf das Buch sauer, aber wegen ganz anderen Gründen (zum Teil, weil es recht bes*****en geschrieben war).



  • manchmal liegts auch an der eigenen unfähigkeit. die msdn ist sehr gut und ein wissensfundus, der leider viel zu wenig in anspruch genommen wird. 80% aller fragen in diesem forum könnten uns erspart bleiben, wenn die leute mal eine viertelstunde die entsprechenden seiten in der msdn gelesen hätten.



  • asdca schrieb:

    manchmal liegts auch an der eigenen unfähigkeit. die msdn ist sehr gut und ein wissensfundus, der leider viel zu wenig in anspruch genommen wird. 80% aller fragen in diesem forum könnten uns erspart bleiben, wenn die leute mal eine viertelstunde die entsprechenden seiten in der msdn gelesen hätten.

    lol wenn ich mir die antworten Selber suchen will tue ich doch hier nicht Fragen wozu ist den das forum eigentlich da wen nicht zum Fragen ???????



  • sicherlich nicht um sich von anderen sachen raussuchen zu lassen, nur weil man selbst zu faul dazu ist. wenn ich bald admin bin, werde ich sowas dann auch unterbinden.


  • Mod

    mausi92 schrieb:

    asdca schrieb:

    manchmal liegts auch an der eigenen unfähigkeit. die msdn ist sehr gut und ein wissensfundus, der leider viel zu wenig in anspruch genommen wird. 80% aller fragen in diesem forum könnten uns erspart bleiben, wenn die leute mal eine viertelstunde die entsprechenden seiten in der msdn gelesen hätten.

    lol wenn ich mir die antworten Selber suchen will tue ich doch hier nicht Fragen wozu ist den das forum eigentlich da wen nicht zum Fragen ???????

    1. Ein Forum ist meiner Meinung dafür da um fachliche Probleme zu diskutieren.
    2. Ein Forum ist meiner Meinung nicht dafür da ein Handbuch oder ein Nachschlagewerk zu ersetzen.
    3. Glaube ich das sogar 90% aller Anfragen in diesem Forum unnötig sind, und weitaus schneller durch eine Vernünftige Suche in Google, MSDN oder in CodeProject beantwortet werden könnten.
    4. Finde ich es absolut dämlich eine Fragezu stellen und auf eine Antwort zu warten ⚠, wenn ich durch Googleeine Antwort sofort bekommen kann. 🕶

    PS: Deine Fragezeichentaste prellt!



  • asdca schrieb:

    manchmal liegts auch an der eigenen unfähigkeit. die msdn ist sehr gut und ein wissensfundus, der leider viel zu wenig in anspruch genommen wird. 80% aller fragen in diesem forum könnten uns erspart bleiben, wenn die leute mal eine viertelstunde die entsprechenden seiten in der msdn gelesen hätten.

    Vielleicht fehlt mir da die richtige Vorgehensweise, aber ich finde es zuweilen recht mühselig, die richtigen Stellen in der MSDN zu finden (wenn ich nicht gerade nach einer mir namentlich bekannten Funktion suche).



  • .......... schrieb:

    Ich vergesse immer wieder, dass C++ (das, was ich gelernt habe), auf noch C als Mitbringsel hat (das, was ich NICHT gelernt habe).

    Wie gesagt, WinAPI ist C und hat mit C++ nix zu tun. Dafür gibt es so Sachen wie MFC...

    .......... schrieb:

    _matze schrieb:

    Zu 8.: Die hast du schon auf deinem Rechner. Und per Google findet man auch zu jeder Funktion eine Erklärung und ein vernünftiges Beispiel.

    Nicht die API, sondern eine Beschreibung.

    Ich meine auch die Beschreibung (MSDN). Die solltest du auf dem Rechner haben, die wird ja standardmäßig mit dem VS installiert. Vielleicht bei der EE nicht, keine Ahnung, aber die kann man auch runterladen, glaub ich. Und wie asdca schon gesagt hat, da ist eigentlich alles drin, was man so an Infos braucht.

    .......... schrieb:

    Und ich kann nicht wegen jedem Mist ins Internet gehen, weil ich zu Hause keinen Internetzugang habe.

    Daran solltest du aber dringend was ändern! Wenn die Entwicklung so weitergeht, programmieren wir bald alle nur noch mit Web-IDEs als Browser-Plugin... 😉



  • .......... schrieb:

    Nicht unbedingt. Ich finde es verwirrend und unübersichtlich, aber jeder hat eine andere Meinung.

    Nur weil du unfaehig bist, heisst das noch lange nicht, dass die Hilfe schlecht ist.

    .......... schrieb:

    Ha, danke! Ich vergesse immer wieder, dass C++ (das, was ich gelernt habe), auf noch C als Mitbringsel hat (das, was ich NICHT gelernt habe).

    Wenn du C++ "gelernt" hast, solltest du dich auch in C zurechtfinden, ist naemlich 'ne Untermenge (fast).

    .......... schrieb:

    Ne, vom der Microsofthilfe habe ich erstmal genug (und von DLLs ebenfalls, aber das ist irrelevant).

    Siehe Unfaehigkeit. Ausserdem hast du eine niedrige Frustrationsgrenze, vielleicht ist programmieren doch nichts fuer dich.

    .......... schrieb:

    lol wenn ich mir die antworten Selber suchen will tue ich doch hier nicht Fragen wozu ist den das forum eigentlich da wen nicht zum Fragen ???????

    Selber denken, Glueck verschenken. Aber du scheinst nicht gluecklich und willst nur Frust ablassen. Leider musst du dann auf provokante Antworten gefasst sein.



  • Im Gegenteil, niedriege Frustrationgrenze. Ich habe das Buch zwei Wochen zum Thema über DLLs konsultiert, und eine weitere Woche versucht, mit MSDN eine kleine DLL zu erstellen. Ausserdem lerne ich nebenbei Assembler, beschäftige mich mit Speichermanipulation, erstelle zu Hause eine Liste mit Assemblerbefehlen (ich habe es gern ordentlich) und ich bin erst siebzehn, dass heisst, ich gehe noch zur Schule und habe meistens nur 1 oder 2 Stunden pro Tag Zeit für C++. Und nun erkläre mir, warum ich nicht programmieren sollte.

    Im übrigen ist mein Zitat in deinem Post

    Nicht unbedingt. Ich finde es verwirrend und unübersichtlich, aber jeder hat eine andere Meinung.

    aus dem Zusammenhang gerissen. Was ich da beschrieben habe, waren die vielen (und aus meiner Sicht unnötigen) Definierungen von __stdcall, nicht meine Meinung über MSDN. Ausserdem ist diese (zumindest in meiner Express Version) sehr schlecht und lückenhaft, weshalb ich keine gute Meinung von eben dieser habe. Jeder, der mit ihr gut klarkommt, sei glücklich, denn ich hatte Pech.



  • .......... schrieb:

    Ausserdem ist [die MSDN] zumindest in meiner Express Version) sehr schlecht und lückenhaft, weshalb ich keine gute Meinung von eben dieser habe.

    Und genau das musst du erstmal beweisen. Das sehe ich nämlich nicht so. Du findest dort eine umfassende <edit>und vollständige</edit> Funktionsreferenz, mit der man eigentlich sehr gut arbeiten kann. Und die ganzen Artikel sehe ich nur als zusäzliche Dreingabe, was eine sehr schnöne Sache ist. Aber es ist natürlich kein Ersatz für ein gutes Buch (und auch nicht so gedacht). Ich habe so den Eindruck, dass du das annimmst.



  • .......... schrieb:

    Was ich da beschrieben habe, waren die vielen (und aus meiner Sicht unnötigen) Definierungen von __stdcall, nicht meine Meinung über MSDN.

    Statt aber einfach nach möglichen Gründen und Erläuterungen dafür zu fragen, hast sofort darüber geschimpft wie ein Rohrspatz und das für Blödsinn erklärt (implizit oder explizit).
    Und DAS ist glaube ich hier bei den meisten nicht so gut angekommen - zu Recht, wie ich finde.


Log in to reply