Fehler bei .exe



  • Hallo,

    nachdem ich in mein Programm Daten eingegeben und diese abgespeichert habe, kann ich die Datei nicht öffnen. Es kommt die Meldung "Fehler beim öffnen des Documents".

    Wie kann ich das ändern, oder muss ich das Programm nochmal neu schreiben?

    Danke für die Antworten!

    MfG

    Franz


  • Mod

    Ich vermute mal, dass bei der Serialisierung Deines Dokumentes ein Unterscheid zwischen Laden und Speichern vorhanden ist.
    Zeig uns doch mal Deine Serialize FUnktion aus dem Dokument, oder die Methoden in denen Du liest und schreibst.



  • Also kompiliert wird das Programm ohne Fehlermeldung.
    Anbei zwei Dateien. Vielleicht kannst Du mir weiterhelfen.

    // Lotto.cpp
    
    #include <stdafx.h>
    #include "Lotto.h"
    
    IMPLEMENT_SERIAL(CLotto, CObject, 0)
    
    void CLotto::Serialize(CArchive& ar)
    {
    	if(ar.IsStoring())
    	{
    		ar << m_strMs << m_strDa << m_nKw << m_nSz << m_nZz << m_nSz1 <<
    			  m_nZ1 << m_nZ2 << m_nZ3 << m_nZ4 << m_nZ5 << m_nZ6 <<
    			  m_nS1 << m_nS1_1 << m_nS1_2 << m_nS1_3 << m_nS1_4 << 
    			  m_nS1_5 << m_nS1_6 <<
    			  m_nS2 << m_nS2_1 << m_nS2_2 << m_nS2_3 << m_nS2_4 << 
    			  m_nS2_5 << m_nS2_6 <<
    			  m_nS3 << m_nS3_1 << m_nS3_2 << m_nS3_3 << m_nS3_4 << 
    			  m_nS3_5 << m_nS3_6 <<
    			  m_nS4 << m_nS4_1 << m_nS4_2 << m_nS4_3 << m_nS4_4 << 
    			  m_nS4_5 << m_nS4_6 <<
    			  m_nS5 << m_nS5_1 << m_nS5_2 << m_nS5_3 << m_nS5_4 << 
    			  m_nS5_5 << m_nS5_6 <<
    			  m_nS6 << m_nS6_1 << m_nS6_2 << m_nS6_3 << m_nS6_4 << 
    			  m_nS6_5 << m_nS6_6 <<
    			  m_nS7 << m_nS7_1 << m_nS7_2 << m_nS7_3 << m_nS7_4 << 
    			  m_nS7_5 << m_nS7_6 <<
    			  m_nS8 << m_nS8_1 << m_nS8_2 << m_nS8_3 << m_nS8_4 << 
    			  m_nS8_5 << m_nS8_6 <<
    			  m_nS9 << m_nS9_1 << m_nS9_2 << m_nS9_3 << m_nS9_4 << 
    			  m_nS9_5 << m_nS9_6 <<
    			  m_nS10 << m_nS10_1 << m_nS10_2 << m_nS10_3 << m_nS10_4 << 
    			  m_nS10_5 << m_nS10_6 <<
    			  m_nS11 << m_nS11_1 << m_nS11_2 << m_nS11_3 << m_nS11_4 << 
    			  m_nS11_5 << m_nS11_6 <<
    			  m_dJg << m_dTg << m_dWg << m_dGk1 << m_dGk2 << m_dGk3 << 
    			  m_dGk4 << m_dGk5 << m_dGk6 << m_dGk7 << m_dGk8 <<
    			  m_dW01 << m_dW02 << m_dW03 << m_dW04 << m_dW05 << m_dW06 <<
    			  m_dW07 << m_dW08 << m_dW09 << m_dW10 <<
    			  m_dW11 << m_dW12 << m_dW13 << m_dW14 << m_dW15 << m_dW16 <<
    			  m_dW17 << m_dW18 << m_dW19 << m_dW20 <<
    			  m_dW21 << m_dW22 << m_dW23 << m_dW24 << m_dW25 << m_dW26 <<
    			  m_dW27 << m_dW28 << m_dW29 << m_dW30 <<
    			  m_dW31 << m_dW32 << m_dW33 << m_dW34 << m_dW35 << m_dW36 <<
    			  m_dW37 << m_dW38 << m_dW39 << m_dW40 <<
    			  m_dW41 << m_dW42 << m_dW43 << m_dW44 << m_dW45 << m_dW46 <<
    			  m_dW47 << m_dW48 << m_dW49 << m_dW50 <<
    			  m_dW51 << m_dW52; 
    	}
    	else
    	{
    		ar >> m_strMs >> m_strDa >> m_nKw >> m_nSz >> m_nZz >> m_nSz1 >>
    			  m_nZ1 >> m_nZ2 >> m_nZ3 >> m_nZ4 >> m_nZ5 >> m_nZ6 >>
    			  m_nS1 >> m_nS1_1 >> m_nS1_2 >> m_nS1_3 >> m_nS1_4 >> 
    			  m_nS1_5 >> m_nS1_6 >>
    			  m_nS2 >> m_nS2_1 >> m_nS2_2 >> m_nS2_3 >> m_nS2_4 >> 
    			  m_nS2_5 >> m_nS2_6 >>
    			  m_nS3 >> m_nS3_1 >> m_nS3_2 >> m_nS3_3 >> m_nS3_4 >> 
    			  m_nS3_5 >> m_nS3_6 >>
    			  m_nS4 >> m_nS4_1 >> m_nS4_2 >> m_nS4_3 >> m_nS4_4 >> 
    			  m_nS4_5 >> m_nS4_6 >>
    			  m_nS5 >> m_nS5_1 >> m_nS5_2 >> m_nS5_3 >> m_nS5_4 >> 
    			  m_nS5_5 >> m_nS5_6 >>
    			  m_nS6 >> m_nS6_1 >> m_nS6_2 >> m_nS6_3 >> m_nS6_4 >> 
    			  m_nS6_5 >> m_nS6_6 >>
    			  m_nS7 >> m_nS7_1 >> m_nS7_2 >> m_nS7_3 >> m_nS7_4 >> 
    			  m_nS7_5 >> m_nS7_6 >>
    			  m_nS8 >> m_nS8_1 >> m_nS8_2 >> m_nS8_3 >> m_nS8_4 >> 
    			  m_nS8_5 >> m_nS8_6 >>
    			  m_nS9 >> m_nS9_1 >> m_nS9_2 >> m_nS9_3 >> m_nS9_4 >> 
    			  m_nS9_5 >> m_nS9_6 >>
    			  m_nS10 >> m_nS10_1 >> m_nS10_2 >> m_nS10_3 >> m_nS10_4 >> 
    			  m_nS10_5 >> m_nS10_6 >>
    			  m_nS11 >> m_nS11_1 >> m_nS11_2 >> m_nS11_3 >> m_nS11_4 >> 
    			  m_nS11_5 >> m_nS11_6 >>
    			  m_dJg >> m_dTg >> m_dWg >> m_dGk1 >> m_dGk2 >> m_dGk3 >> 
    			  m_dGk4 >> m_dGk5 >> m_dGk6 >> m_dGk7 >> m_dGk8 >>
    			  m_dW01 >> m_dW02 >> m_dW03 >> m_dW04 >> m_dW05 >> m_dW06 >>
    			  m_dW07 >> m_dW08 >> m_dW09 >> m_dW10 >>
    			  m_dW11 >> m_dW12 >> m_dW13 >> m_dW14 >> m_dW15 >> m_dW16 >>
    			  m_dW17 >> m_dW18 >> m_dW19 >> m_dW20 >>
    			  m_dW21 >> m_dW22 >> m_dW23 >> m_dW24 << m_dW25 >> m_dW26 >>
    			  m_dW27 >> m_dW28 >> m_dW29 >> m_dW30 >>
    			  m_dW31 >> m_dW32 >> m_dW33 >> m_dW34 >> m_dW35 >> m_dW36 >>
    			  m_dW37 >> m_dW38 >> m_dW39 >> m_dW40 >>
    			  m_dW41 >> m_dW42 >> m_dW43 >> m_dW44 >> m_dW45 >> m_dW46 >>
    			  m_dW47 >> m_dW48 >> m_dW49 >> m_dW50 >> m_dW51 >> m_dW52;
    	}
    }
    
    #ifdef _DEBUG
    void CLotto::Dump(CDumpContext &dc) const
    {
    	CObject::Dump(dc);
    	dc << "m_strDa = " << m_strDa;
    }
    #endif // _DEBUG
    
    // LottoMaxDoc.cpp : Implementierung der Klasse CLottoMaxDoc
    //
    
    #include "stdafx.h"
    #include "LottoMax.h"
    
    #include "LottoMaxDoc.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    // CLottoMaxDoc
    
    IMPLEMENT_DYNCREATE(CLottoMaxDoc, CDocument)
    
    BEGIN_MESSAGE_MAP(CLottoMaxDoc, CDocument)
    	ON_COMMAND(ID_BEARBEITEN_ALLESLOESCHEN, &CLottoMaxDoc::OnBearbeitenAllesloeschen)
    	ON_UPDATE_COMMAND_UI(ID_BEARBEITEN_ALLESLOESCHEN, &CLottoMaxDoc::OnUpdateBearbeitenAllesloeschen)
    	ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, &CLottoMaxDoc::OnUpdateFileSave)
    END_MESSAGE_MAP()
    
    // CLottoMaxDoc-Erstellung/Zerstörung
    
    CLottoMaxDoc::CLottoMaxDoc()
    {
    	// TODO: Hier Code für One-Time-Konstruktion einfügen
    #ifdef _DEBUG
    	afxDump.SetDepth(1);
    #endif // _DEBUG
    
    }
    
    CLottoMaxDoc::~CLottoMaxDoc()
    {
    }
    
    BOOL CLottoMaxDoc::OnNewDocument()
    {
    	if (!CDocument::OnNewDocument())
    		return FALSE;
    
    	// TODO: Hier Code zur Reinitialisierung einfügen
    	// (SDI-Dokumente verwenden dieses Dokument)
    
    	return TRUE;
    }
    
    // CLottoMaxDoc-Serialisierung
    
    void CLottoMaxDoc::Serialize(CArchive& ar)
    {
    	if (ar.IsStoring())
    	{
    		// TODO: Hier Code zum Speichern einfügen
    	}
    	else
    	{
    		// TODO: Hier Code zum Laden einfügen
    	}
    	m_lottoList.Serialize(ar);
    }
    
    // CLottoMaxDoc-Diagnose
    
    #ifdef _DEBUG
    void CLottoMaxDoc::AssertValid() const
    {
    	CDocument::AssertValid();
    }
    
    void CLottoMaxDoc::Dump(CDumpContext& dc) const
    {
    	CDocument::Dump(dc);
    	dc << "\n" << m_lottoList << "\n";
    }
    #endif //_DEBUG
    
    void CLottoMaxDoc::DeleteContents()
    {
    	while(m_lottoList.GetHeadPosition())
    	{
    		delete m_lottoList.RemoveHead();
    	}
    }
    
    // CLottoMaxDoc-Befehle
    
    void CLottoMaxDoc::OnBearbeitenAllesloeschen()
    {
    	// TODO: Fügen Sie hier Ihren Befehlsbehandlungscode ein.
    	DeleteContents();
    	UpdateAllViews(NULL);
    }
    
    void CLottoMaxDoc::OnUpdateBearbeitenAllesloeschen(CCmdUI *pCmdUI)
    {
    	// TODO: Fügen Sie hier Ihren Befehlsaktualisierungs-UI-Behandlungscode ein.
    	pCmdUI->Enable(!m_lottoList.IsEmpty());
    }
    
    void CLottoMaxDoc::OnUpdateFileSave(CCmdUI *pCmdUI)
    {
    	// TODO: Fügen Sie hier Ihren Befehlsaktualisierungs-UI-Behandlungscode ein.
    	pCmdUI->Enable(IsModified());
    }
    

    Ich habe die gleichen Dateien schon in einem anderen Programm verwendet und da funktioniert alles.

    Grüsse und Danke

    Franz


  • Mod

    Hier sehe ich keine Problem. Wird denn diese Funktion angesprungen?
    Wenn Du debuggst, wo steigt Dein Programm aus?
    Was steht in der Debug Ausgabe?

    Bist Du sicher, dass die Datei mit der selben Programmversion geschrieben wurde?



  • Hallo Martin,

    anbei die Debugausgabe:

    "LottoMax.exe": "C:\Dokumente und Einstellungen\Franz Hembera\Eigene Dateien\Visual Studio 2005\Projects\LottoMaxProjekt\debug\LottoMax.exe" geladen, Symbole wurden geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\ntdll.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\kernel32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_c8452471\mfc80ud.dll" geladen, Symbole wurden geladen.
    "LottoMax.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcr80d.dll" geladen, Symbole wurden geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\msvcrt.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\gdi32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\user32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\shlwapi.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\advapi32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\rpcrt4.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\oleaut32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\ole32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\imm32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_3415f6d0\mfc80DEU.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
    "LottoMax.exe": "C:\WINDOWS\system32\uxtheme.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\msctf.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\shell32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\version.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\version.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\msctfime.ime" geladen, Keine Symbole geladen.
    Warning: no message line prompt for ID 0x8007.
    "LottoMax.exe": "C:\WINDOWS\system32\comdlg32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\apphelp.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\clbcatq.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\comres.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\version.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\cscui.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\cscdll.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\browseui.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\setupapi.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\ntshrui.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\atl.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\netapi32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\userenv.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\shdocvw.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\crypt32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\msasn1.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\cryptui.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\wintrust.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\imagehlp.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\wininet.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\normaliz.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\iertutil.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\wldap32.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\riched20.dll" geladen, Keine Symbole geladen.
    "LottoMax.exe": "C:\WINDOWS\system32\riched20.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\browseui.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\shdocvw.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\cryptui.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\wldap32.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\wininet.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\iertutil.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\normaliz.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\wintrust.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\imagehlp.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\crypt32.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\msasn1.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\cscui.dll" entladen.
    "LottoMax.exe": "C:\WINDOWS\system32\cscdll.dll" entladen.
    Der Thread 'Win32 Thread' (0xea8) hat mit Code 0 (0x0) geendet.
    Der Thread 'Win32 Thread' (0xeb0) hat mit Code 0 (0x0) geendet.
    Der Thread 'Win32 Thread' (0xea0) hat mit Code 0 (0x0) geendet.
    Der Thread 'Win32 Thread' (0xe84) hat mit Code 0 (0x0) geendet.
    Das Programm "[1016] LottoMax.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.

    Ich habe mir vor einigen Tagen Die Trial-Version von Visualstudio 2005 heruntergeladen. Mit dieser funktionierte das Programm auch, bis ich gestern versuchte, Typkonvertierungen durchzuführen.

    m_strKaw.Format(_T("%d"), m_nKw);
    m_nKw = _ttoi(m_strKaw);
    m_dW01 = _ttof(m_strWo01);

    Bei _ttof hat der Compiler gemeckert. Also habe ich alle Konvertierungen wieder gelöscht und das Programm so compiliert, wie ich es eingangs hatte. Seither habe ich nun das Problem.

    Vielleicht weisst Du jetzt mehr.

    Grüsse

    Franz



  • Nulltens: Ich war mal so frei, deinen Beitrag um CPP-Tags zu ergänzen.

    Erstens: Ich bin nicht 100% sicher, aber bei der Ausgabe müsstest du evt. Trennzeichen zwischen den einzelnen Daten einhängen, damit sie später wieder auseinandergenommen werden können.

    Zweitens: Hast du mal im Debugger beobachtet, wie dein Programm die Daten geschrieben/gelesen hat?

    PS: Und die Ausgabe sieht grauenhaft aus - hast du schon mal von Arrays gehört?



  • Hallo CStoll,

    natütlich habe ich schon mal von Arrays gelesen, aber ich kann damit nichts anfangen. Bringe mir alles selber aus Büchern bei und bin schon zu alt, um einen Kurs zu belegen. Ausserdem fehlen mir die nötigen Mittel.

    Deshalb habe ich halt soviele Fragen und ich bin froh, dass es solche Foren gibt, in denen man auch mal etwas fragen oder nachlesen kann.

    Ich hoffe, dass ich auf Verständnis stosse!

    Grüsse

    Franz



  • Okay, einmal Arrays für Anfänger in der Kurzfassung. 😉

    So deklarierst du ein CArray. Das in den spitzen Klammern ist der Typ den du speichern möchtest.

    CArray<int, int> arrZahlen;
    

    So packst du was rein:

    arrZahlen.Add(1);
    arrZahlen.Add(3);
    

    So holst du was raus:

    int a = arrZahlen.GetAt(0);
    

    Also, das ist dann hinterher noch drin, du holst nur eine Kopie.

    Okay? Frag einfach wenn dir noch was fehlt - ich schreib nur so ungern Dinge die du schon weißt oder duch einen Schubs in die richtige Richtung selbst rausgefunden hast. 🙂



  • Leider habe ich von Arrays noch gar keine Ahnung, werde mich aber in der nächsten Zeit mal damit auseinandersetzen. Bei Bedarf werde ich mich an Dich wenden!

    Übrigend habe ich meinen PC neu formatiert, da mir das Visualstudio 2005 alle bereits erstellten mit VC++ 6.0 Programme demoliert hat.

    Kann es sein, dass sich die beiden nicht vertragen?

    Danke und Grüsse

    Franz


  • Mod

    Franz Hembera schrieb:

    Leider habe ich von Arrays noch gar keine Ahnung, werde mich aber in der nächsten Zeit mal damit auseinandersetzen. Bei Bedarf werde ich mich an Dich wenden!

    Übrigend habe ich meinen PC neu formatiert, da mir das Visualstudio 2005 alle bereits erstellten mit VC++ 6.0 Programme demoliert hat.

    Kann es sein, dass sich die beiden nicht vertragen?

    Ich habe drei verschiedene VS Version 6.0, .NET 2003 und die 2005 Version auf diesem Rechner. Da beisst sich gar nichts und demolieren tut VS2005 auch nichts.



  • Du darfst nur ein Projekt nicht mal mit dem einen und mal mit dem anderen öffnen.
    Sonst vertragen sich bei mir VC6 und VC2003 seit Jahren gut. Und auch auf dem PC wo ich mal VC6 und VC2005 drauf hatte, konnte ich keine Probleme feststellen.


Anmelden zum Antworten