Error in winbase.h



  • Nabend zusammen

    Habe gerade versucht, mein erstes MFC-Programm zu kreieren. Habe den Assistenten gestartet und direkt mal versucht, das inhaltlich leere Programm zu starten.
    Überraschenderweise gab Visual C++ folgende Fehlermeldung aus:
    Kompilierung läuft...
    StdAfx.cpp
    c:\programme\microsoft visual studio\vc98\include\winbase.h(6224) : error C2011: '_TIME_ZONE_INFORMATION' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(6664) : error C2011: '_RECOVERY_AGENT_INFORMATIONA' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(6669) : error C2011: '_RECOVERY_AGENT_INFORMATIONW' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(7056) : error C2011: '_WIN32_STREAM_ID' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(7129) : error C2011: '_STARTUPINFOA' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(7149) : error C2011: '_STARTUPINFOW' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(7179) : error C2011: '_WIN32_FIND_DATAA' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(7196) : error C2011: '_WIN32_FIND_DATAW' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(7223) : error C2011: '_WIN32_FILE_ATTRIBUTE_DATA' : 'struct'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(8814) : error C2011: '_GET_FILEEX_INFO_LEVELS' : 'enum'-Typ-Neudefinition
    c:\programme\microsoft visual studio\vc98\include\winbase.h(9089) : fatal error C1070: Fehlende Zuordnung von #if und #endif in Datei 'c:\programme\microsoft visual studio\vc98\include\winbase.h'
    Fehler beim Ausführen von cl.exe.

    mfchello.exe - 11 Fehler, 0 Warnung(en)

    Woran könnte dies liegen ?



  • Hallo,

    wie sehen die #include's aus? Es sieht so aus, als ob du irgendwo etwas includierst, das nicht nötig ist.

    MfG



  • #include "stdafx.h"
    #include "mfchello.h"
    #include "mfchelloDlg.h"

    Das Problem ist, dass ich genau nach Anweisung von "Visual C++ in 21 Tagen" gehandelt habe und es trotzdem nicht geht.

    Könnte die Datei beschädigt sein ?



  • nein, das sieht nicht nach einer beschädigten Datei aus. Zeige doch mal, was in der stdafx.h und in der stdafx.cpp enthalten ist.

    MfG



  • Wie gesagt: steht noch fast nichts drin (nach einem Beispiel aus dem Visual C++ in 21 Tagen - Buch:

    // stdafx.h : Include-Datei für Standard-System-Include-Dateien,
    // oder projektspezifische Include-Dateien, die häufig benutzt, aber
    // in unregelmäßigen Abständen geändert werden.
    //

    #if !defined(AFX_STDAFX_H__CD0409B9_6A2E_4317_B62E_ADDBC97E3C4A__INCLUDED_)
    #define AFX_STDAFX_H__CD0409B9_6A2E_4317_B62E_ADDBC97E3C4A__INCLUDED_

    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000

    #define VC_EXTRALEAN // Selten verwendete Teile der Windows-Header nicht einbinden

    #include <afxwin.h> // MFC-Kern- und -Standardkomponenten
    #include <afxext.h> // MFC-Erweiterungen
    #include <afxdtctl.h> // MFC-Unterstützung für allgemeine Steuerelemente von Internet Explorer 4
    #ifndef _AFX_NO_AFXCMN_SUPPORT
    #include <afxcmn.h> // MFC-Unterstützung für gängige Windows-Steuerelemente
    #endif // _AFX_NO_AFXCMN_SUPPORT

    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.

    #endif // !defined(AFX_STDAFX_H__CD0409B9_6A2E_4317_B62E_ADDBC97E3C4A__INCLUDED_)

    // stdafx.cpp : Quelltextdatei, die nur die Standard-Includes einbindet
    // mfchello.pch ist die vorcompilierte Header-Datei
    // stdafx.obj enthält die vorcompilierte Typinformation

    #include "stdafx.h"



  • wollte nur ganz sicher gehen, jetzt muß man doch sagen, daß irgendetwas mit deinen Dateien nicht stimmt, evtl. stimmt winbase.h nicht, denn jetzt erkenne ich: die winbase.h der Standard-Installation von Visual C++ 6.0 besitzt in Zeile 6224 nicht die Struktur _TIME_ZONE_INFORMATION, wie im Fehler angegeben, es sieht so aus, als ob in deiner winbase.h einiges doppelt vorhanden ist. Hast du da irgendwas versehentlich hineinkopiert? Die "richtige" winbase.h hat 8620 Zeilen, prüfe, ob das bei dir auch der Fall ist, wenn nicht, dann ist die Datei verändert worden.

    MfG



  • Habe jetzt mal den winbase.h-Code von einer Internetseite neu kopier und über den alten gespeichert. Dann trat ein Problem mit wincon.h auf, habe dann diese Datei auch ersetzt und nun stehen folgende Fehler da:

    Ressourcen werden kompiliert...
    Kompilierung läuft...
    StdAfx.cpp
    Kompilierung läuft...
    mfchello.cpp
    mfchelloDlg.cpp
    C:\Programme\Microsoft Visual Studio\MyProjects\mfchello\mfchelloDlg.cpp(173) : error C2653: 'CHelloDlg' : Keine Klasse oder Namespace
    C:\Programme\Microsoft Visual Studio\MyProjects\mfchello\mfchelloDlg.cpp(182) : error C2660: 'MessageBoxA' : Funktion akzeptiert keine 1 Parameter
    Generieren von Code...
    Fehler beim Ausführen von cl.exe.

    Datei:
    // mfchelloDlg.cpp : Implementierungsdatei
    //

    #include "stdafx.h"
    #include "mfchello.h"
    #include "mfchelloDlg.h"

    #ifdef DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE
    _;
    #endif

    /////////////////////////////////////////////////////////////////////////////
    // CAboutDlg-Dialogfeld für Anwendungsbefehl "Info"

    class CAboutDlg : public CDialog
    {
    public:
    CAboutDlg();

    // Dialogfelddaten
    //{{AFX_DATA(CAboutDlg)
    enum { IDD = IDD_ABOUTBOX };
    //}}AFX_DATA

    // Vom Klassenassistenten generierte Überladungen virtueller Funktionen
    //{{AFX_VIRTUAL(CAboutDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
    //}}AFX_VIRTUAL

    // Implementierung
    protected:
    //{{AFX_MSG(CAboutDlg)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };

    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
    }

    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutDlg)
    //}}AFX_DATA_MAP
    }

    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    //{{AFX_MSG_MAP(CAboutDlg)
    // Keine Nachrichten-Handler
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // CMfchelloDlg Dialogfeld

    CMfchelloDlg::CMfchelloDlg(CWnd* pParent /=NULL/)
    : CDialog(CMfchelloDlg::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CMfchelloDlg)
    // HINWEIS: Der Klassenassistent fügt hier Member-Initialisierung ein
    //}}AFX_DATA_INIT
    // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    void CMfchelloDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CMfchelloDlg)
    // HINWEIS: Der Klassenassistent fügt an dieser Stelle DDX- und DDV-Aufrufe ein
    //}}AFX_DATA_MAP
    }

    BEGIN_MESSAGE_MAP(CMfchelloDlg, CDialog)
    //{{AFX_MSG_MAP(CMfchelloDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDOK, OnHello)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // CMfchelloDlg Nachrichten-Handler

    BOOL CMfchelloDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();

    // Hinzufügen des Menübefehls "Info..." zum Systemmenü.

    // IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    }

    // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
    // wenn das Hauptfenster der Anwendung kein Dialogfeld ist
    SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden
    SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden

    // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen

    return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }

    void CMfchelloDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    }
    else
    {
    CDialog::OnSysCommand(nID, lParam);
    }
    }

    // Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie
    // den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das
    // Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt.

    void CMfchelloDlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // Gerätekontext für Zeichnen

    SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

    // Symbol in Client-Rechteck zentrieren
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2;

    // Symbol zeichnen
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CDialog::OnPaint();
    }
    }

    // Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer
    // das zum Symbol verkleinerte Fenster mit der Maus zieht.
    HCURSOR CMfchelloDlg::OnQueryDragIcon()
    {
    return (HCURSOR) m_hIcon;
    }

    void CHelloDlg::OnHello()
    {
    // TODO: Code für die Behandlungsroutine der Steuerelement- ÂBenachrichtigung hier einfügen

    ///////////////////////
    // EIGENER CODE, ANFANG
    ///////////////////////

    // Benutzer begrüßen
    MessageBox("Hello. Das ist meine erste Visual C++-Anwendung!");

    ///////////////////////
    // EIGENER CODE, ENDE
    ///////////////////////
    }
    mfchello.exe - 2 Fehler, 0 Warnung(en)



  • Das Problem hat sich jetzt irgendwie aufgelöst. Eien Stelle im Code war falsch und auch das winbase.h-Problem taucht nicht mehr auf.

    Thx, Probe-Nutzer


Anmelden zum Antworten