Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

dev_null

Frischling

  • »dev_null« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Augsburg

Beruf: Application Developer

  • Private Nachricht senden

1

02.07.2007, 12:05

Das erste Fenster - Fehler beim kompilieren

Hallo, ich bin gerade dabei mein "erstes" Fenster zu schreiben. Jedoch hat sich das Abtippen als die reinste Katastrophe entpuppt :)

Paar sachen vorweg:

Ich verwende Visual C++ 2005 Express Edition.

Im Buch steht das ich ein Neues Projekt anlegen soll, statt eine win32-Konsolten anwendun eine Win32-Anwendung. So Da es die bezeichnug bei mir nicht gibt, habe ich eine Windows Forms-Anwendung genommen. (keine Ahnung ob das richtig war)

Dann sollte ich eine neue Datei anlegen. wo ich mein Code rein schreiben kann; gesagt getan.

Der Code, den ich Abgetippt habe:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// C++

// Listing

// Windows

//

#include <windows.h>

// Prototyp der Callback-Funktion

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

// Hauptprogramm

//

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpcmdline, int ncmdshow)
{
    WNDCLASSEX windowclass;     // Struktur für Fenstereigenschafen

    HWND hWnd;                  // Fenster-Handle

    MSG message;                // Nachricht


    // Der Klassenname des Fensters ist frei wählbar

    const char szClassName[] = "Erstes Fenster";

    // Struktur mit gewünschten Eigenschaften füllen

    //


    // Größe der Struktur zwischen speichern

    //

    windowclass.cbSize = sizeof (WNDCLASSEX);

    // Fenster soll beim verschieben neu gezeichnet werden

    windowclass.style = CS_HREDRAW | CS_VREDRAW;

    // Zeiger auf Callback-Funktion

    windowclass.lpfnWndProc = WindowProc;

    // Keine erweiterten Einstellungen

    windowclass.cbClsExtra = 0;
    windowclass.cbWndExtra = 0;

    // Instanz speichern

    windowclass.hInstance = hInst;

    // Icons und Cursor festlegen

    windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);

    // Hintergrundfarbe festlegen

    windowclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1;

    // Ein Menü brauchen wir nicht

    windowclass.lpszMenuName = NULL;

    // Klassenname angeben

    windowclass.lpszClassName = szClassName;

    // Fensterklasse registrieren

    if (!RegisterClassEx (&windowclass)) 
        return 0;

    // Das Fenster erzeugen

    hWnd = CreateWindowEx (NULL,
                           szClassName,
                           "Das erste Fenster!",
                           WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                           100, 100,
                           300, 250,
                           NULL,
                           NULL,
                           hInst,
                           NULL);

    // Prüfen ob alles glatt ging

    if (hWnd == NULL)
        return 0;

    // Messages

    while (GetMessage (&message, NULL, 0, 0))
    {
        TranslateMessage (&message);
        DispatchMessage (&message);
    }

    // Programm beenden

    return (int) (message.wParam);
} // WinMain


// Callback-Funktion zur Nachrichten bearbeitung

//

LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    // Message auswerten

    switch (message)
    {
        // Fenster schließen?

        case WM_DESTROY:
        {
            // Nachricht zum beenden schicken

            PostQuitMessage (0);
            return (0);
        }
        // Wurde eine Taste gedrückt?

        case WM_KEYDOWN:
        {
            // Ja, also nach Taste verzweigen

            switch (wParam)
            {
                // Wurde ESCAPE gedrückt

                case VK_ESCAPE:
                {
                    // Ja, also Nachricht zum beenden schicken

                    PostQuitMessage (0);
                    return (0);
                }
            }
        } break;
    }

    // Nachrichten von Windows verarbeiten lassen

    return (DefWindowProc (hWnd, message, wParam, lParam));
} // WindowProc


So ich bin mir zu 99% sicher das ich keine Tippfehler habe.

Nun bekomme ich bei meinem Kompiliervorgang einen Error.

Zitat


------ Erstellen gestartet: Projekt: window, Konfiguration: Debug Win32 ------
Kompilieren...
window.cpp
main.cpp
.\main.cpp(121) : fatal error C1010: Unerwartetes Dateiende während der Suche nach dem vorkompilierten Header. Haben Sie möglicherweise vergessen, im Quellcode "#include "stdafx.h"" einzufügen?
Code wird generiert...
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\root\Eigene Dateien\Visual Studio 2005\Projects\window\window\Debug\BuildLog.htm" gespeichert.
window - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Gut der Kompiler ist der Boss also mache ich das was er vorschlägt (Das steht nicht im Buch, lauf Buch muss ich nur windows.h einbinden.

Also binde ich die stdafx.h ein. So nun kommen ca 20 Errors, die ich hier aus Platzgründen nicht Posten will, ich denke einfach mal das ich was Falsch gemacht habe, was nicht am Code liegt, ich spekuliere, das es irgendwas mit dem Projekt zu tun hat.

Hat jemand einen Tipp für mich?

so long
Think free!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

02.07.2007, 12:12

Vorkompilierte Header in den Projekteinstellungen ausstellen würd ich mal tippen und wie gesagt nicht Forms sondern Win32 Anwendung (bei mir: Win32 Projekt) machen

dev_null

Frischling

  • »dev_null« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Augsburg

Beruf: Application Developer

  • Private Nachricht senden

3

02.07.2007, 12:18

Leider hilft das auch nichts :( Wenn ich es abschalte, bekomme ich die Fehler:

Zitat


------ Erstellen gestartet: Projekt: window, Konfiguration: Debug Win32 ------
Kompilieren...
window.cpp
main.cpp
.\main.cpp(13) : error C2373: 'WinMain': Neudefinition; unterschiedliche Modifizierer
C:\Programme\Microsoft Platform SDK\Include\winbase.h(1875): Siehe Deklaration von 'WinMain'
.\main.cpp(32) : error C2440: '=': 'LRESULT (__clrcall *)(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'WNDPROC' konvertiert werden
Die Adresse einer Funktion liefert die __clrcall-Aufrufkonvention in /clr:pure und /clr:safe. Verwenden Sie evtl. __clrcall im Zieltyp.
.\main.cpp(53) : error C2440: '=': 'const char [15]' kann nicht in 'LPCWSTR' konvertiert werden
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
.\main.cpp(69) : error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [15]' 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.
.\main.cpp(8) : error C3641: "WindowProc": Ungültige Aufrufkonvention "__stdcall " für eine Funktion, die mit /clr:pure oder /clr:safe kompiliert wurde.
AssemblyInfo.cpp
Code wird generiert...
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\root\Eigene Dateien\Visual Studio 2005\Projects\window\window\Debug\BuildLog.htm" gespeichert.
window - 5 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
Think free!

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

4

02.07.2007, 12:18

koschka:

ich glaube er hat das win32 projekt noch net freigeschaltet. oO
Das muss man bei der express ja machen, indem man irgend so ne datei bearbeitet.


Socke

dev_null

Frischling

  • »dev_null« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Augsburg

Beruf: Application Developer

  • Private Nachricht senden

5

02.07.2007, 12:19

Zitat von »"Faule Socke"«

koschka:

ich glaube er hat das win32 projekt noch net freigeschaltet. oO
Das muss man bei der express ja machen, indem man irgend so ne datei bearbeitet.


Socke


Sowas in der Art, habe ich mir gedacht, das irgendwas mit dem Projekt nicht hinhaut, aber was :(
Think free!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

6

02.07.2007, 12:22

ka ich hab keine Express Varianten :) ... Ähm auf jeden Fall solltest du Unicode bei dem Zeichensatz entfernen und alles was nach MFC/AFX klingt rausschmeissen, vllt. gehts dann auch ohne.... garantieren kann ich aba nix :p

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

7

02.07.2007, 12:37

Also hier ist mal der Link: Visual Studio 2005 Express einrichten

habs jetzt auch in meiner signatur...

dev_null

Frischling

  • »dev_null« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Augsburg

Beruf: Application Developer

  • Private Nachricht senden

8

02.07.2007, 12:39

Was kannst du denn empfehlen? VC++EE ist etwas doof, da kein SDK Standard dabei ist und man alle Links selber einbauen muss, das nervt. Welche IDE könntest du mir empfehlen?

Was ich an VC++2k5EE gut finde ist, das wenn ich den Klassenname schreibe dann . kommt eine Liste aller Funktionen. Und der Klassen Browser ist klasse.

Aber das ich die Links für SDK selber machen muss etc. Ist doof :(
Think free!

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

9

02.07.2007, 12:52

Die Funktion die dich so begeistert nennt sich IntelliSense.

Ich benutze Visual Studio 2005 Standard, das kostet allerdings.
Ansonsten kann ich nur die express editionen von 2005 empfehlen. ich hab die auch mal benutzt, hatte nie probleme damit.

PS: Ich hoffe die frage war an mich gerichtet...


Socke

dev_null

Frischling

  • »dev_null« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Augsburg

Beruf: Application Developer

  • Private Nachricht senden

10

02.07.2007, 12:52

@Faule Socke

Habe das nun genau so eingerichtet Wie es in der Anleitung steht, das Problem bsteht weiterhin, wie schon von mir beschrieben :( VC++EE ist scheiße :(

// EDIT
Was funktioniert ist, ein neue Projekt einrichten und kompilieren, das klappt und ich habe ein Fenster, jedoch klappt der Code aus dem Buch nicht :evil:
Think free!

Werbeanzeige