c++ WinAPI und lauter Fehler



  • Danke, ich hab nun die iso nur weiß ich nicht, we man compilt. Bei devc++ ging ja alles automatisch nur bei VC? Muss man das da manuell irgendwie machen, wenn ja, wie?



  • Win32-Projekt beginnen, Quellcode basteln, "F5" 😉



  • Du musst
    1. das VC2005 EE installieren
    2. das PSDK runterladen (am besten auch das ISO) und installieren
    3. das PSDK einbinden
    4. Nun kanns losgehen (Datei|Neu...|Projekt|Win32...)

    Siehe auch:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143003.html



  • Jochen Kalmbach schrieb:

    3. das PSDK einbinden

    Sofern man das PSDK im richtigen Ordner installiert (...\Microsoft Visual Studio 8\VC\PlatformSDK\), fällt dieser Punkt sogar weg.



  • Schent funktioniert zu haben...Es kmmen nun neue Fehler, aber d scheinen wohl mehr Compiler bedingt. So gut wie kener meneralten codesfunzt noch...Ist VC genauer? Zum Beispiel hat er gemeckert, als ich:

    long double a = 10;
    long double E = a * sqrt(5);
    machen wollte...

    long double a = 10;
    long double E = a * sqrt(5.0);
    muss es hier ja heißen...Bei dev war sowas noch egal.
    Und bei der WINAPI wo ich ja sowieso schon kaum Ahnung von habe, zeigt er mir nun Fehler, von denen ich kaum weiß wie zu beheben, aber das wird sicher schon. Ich melode mich wieder, wenns Probleme gibt.

    Danke an alle, die mir bis hierhin und im folgenden geholfen haben/helfen werden.



  • Dark_DanI schrieb:

    Es kmmen nun neue Fehler, aber d scheinen wohl mehr Compiler bedingt. So gut wie kener meneralten codesfunzt noch...Ist VC genauer?

    Ja, der Compiler der neueren Visual C++ Versionen ist erheblich standardkonformer. Zu deinem Problem mit sqrt, der Standard definiert diverse Überladungen der Funktion. Die relevanten hier sind:

    float sqrt(float);
    double sqrt(double);
    long double sqrt(long double);
    

    Du übergibst allerdings als Argument

    5
    

    also ein Literal vom Typ int. Dafür gibt es aber keine Überladung. Also weiss der Compiler jetzt nicht, welche Funktion er aufrufen soll. Beim Argument

    5.0
    

    sieht die Sache jedoch anders aus. Hier handelt es sich um ein double Literal. Und dafür gibt es eine Überladung.



  • danke, stand auch bei den Fehlermeldungen dabei...

    Also mit der WinAPI kommich nicht mehr weiter. Ich hab jetzt ne Ewigkeitlang mit Konvertierungen gekämpft und....

    #include <windows.h>
    
    #define STRICT1
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, PSTR szCmdLine, int CmdShow)
    {
    	LPCWSTR Test1 = "Hallo";
    int Ausgabe = MessageBox(NULL, Test1, "Hi", MB_OKCANCEL | MB_ICONEXCLAMATION | MB_DEFBUTTON1);
    return 0;
    }
    

    Fehler:
    1.
    'Initialisierung': 'const char [6]' kann nicht in 'LPCWSTR' konvertiert werden
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    'MessageBoxW': Konvertierung des Parameters 3 von 'const char [3]' in 'LPCWSTR' nicht möglich
    Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    Ich checks nicht->bei dev hat der code wortwörtlich noch ohne Probs funktioniert.



  • Ab VS2005 ist per default alles UNICODE (was auch gut so ist)...
    Somit muss Dein Code so aussehen:

    #include <windows.h>
    #include <tchar.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE PrevInstance, PSTR szCmdLine, int CmdShow)
    {
      LPCTSTR Test1 = _T("Hallo");
      int Ausgabe = MessageBox(NULL, Test1, _T("Hi"), MB_OKCANCEL | MB_ICONEXCLAMATION | MB_DEFBUTTON1);
      return 0;
    }
    


  • annst du den code vielleicht noch ein wenig erläutern? Wieso tchar inkludieren zB?
    Und den Syntax hiervon:
    LPCTSTR Test1 = _T("Hallo");
    Was soll das _T(" ") bedeuten`?

    EDIT:
    Ach und es entsteht nach dem compilen keine .exe...



  • In der tchar.h ist Unicode-Krempel definiert.
    _T("HALLO") sagt das HALLO Unicode-Zeichen sein sollen.
    (Unicode wird von Windows ab Win2K intern verwendet)

    (Alternativ kannst du Unicode vermutlich auch ausschalten)

    Ne .exe entsteht bei Compile-Fehlern selten 😉



  • geeky schrieb:

    In der tchar.h ist Unicode-Krempel definiert.

    Na... das stimmt so nicht ganz.
    tchar.h enthält alle MACROS, welche es erlaube sowohl für ANSI als auch UNICODE mit *ein und dem selben* Source zu kompilieren. Deshalb spielt es dann keine Rolle ob ANSI oder UNICODE in den Projekteinstellungen definiert wurde...

    Das "_T" ist ein Macro, welches entweder zu "(nix)" expandiert oder zu "L"...
    Somit wird entweder ein normaler String deklariert oder ein Unicode-String (L).



  • Mein neues Problem scheint unumgänglich:

    Wie oben erwähnt bekomm ich keine .exe raus....

    Was muss ich tun um eine zu bekommen? Nach dem ERFOLGREICHEN compilen ensteht keine?!



  • Dark_DanI schrieb:

    Was muss ich tun um eine zu bekommen? Nach dem ERFOLGREICHEN compilen ensteht keine?!

    Aber mit dem ERFOLGREICHEN linken...
    Oder einfach F5 drücken...



  • Das System kann die angegebene Datei nicht finden...

    Die exe scheint also nicht zu existieren?!:; 😕



  • Hmmm...wie ich gelesen habe, benutzt du Dev-C++. Sollte das einer dieser seltsamen Bugs der IDE sein? Ansonsten, poste mal das Build Log. Bzw. schaue mal im Projektverzeichnis nach, ob dort irgendwo eine .exe erstellt wurde.



  • später hab ich geschrieben, dass ich seit der Empfehlung auf Visual C++ Express Edition umgestellt habe...



  • OK, ändert aber nichts daran

    Ansonsten, poste mal das Build Log. Bzw. schaue mal im Projektverzeichnis nach, ob dort irgendwo eine .exe erstellt wurde.



  • WinAPI Projekt erstellen, Kleinigkeiten anpassen, dann funktionierts auch mit
    dem DEV.


Anmelden zum Antworten