CString Assertion bzw. CreateDialogIndirect



  • Hey,

    also eigentlich kann m_wavelenths[i] nichts anderes enthalten,... zumal das Programm ja genau ein mal läuft und ab dann nicht mehr.

    Das Array wird nur an folgender Stelle beschrieben:

    m_wavelengthCount = i;
    	m_wavelengths = new double[i];
    	m_values = new double[i];
    	m_results = new double[i];
    	m_done = new bool[i];
    	for( i = 0; i < m_wavelengthCount; i++ )
    		{
    		app->getWavelength(i,m_wavelengths[i]);
    		m_values[i] = 0;
    		m_done[i] = false;
    		}
    	m_refValue = app->getRefValue();
    	m_refString.Format(IDS_REF_VALUE,m_refValue);
    	m_wavelength = m_wavelengths[0];
    	m_channel.Format(IDS_CHANNEL_NUMBER,channel + 1);
    

    app->getWavelength() sieht folgendermaßen aus:

    bool CPowAccApp::getWavelength(int entry,double& wavelength)
    	{
    	CString		entryName;
    
    	entryName.Format(_T("Wavelength%d"),entry + 1);
    	wavelength = iniGetDouble(
    						m_section.GetBuffer(0),
    						entryName.GetBuffer(0),
    						0.0,
    						m_iniFile.GetBuffer(0));
    	m_section.ReleaseBuffer();
    	m_iniFile.ReleaseBuffer();
    	return wavelength != 0.0;
    	}		//	end of CPowAccApp::getWavelength
    

    Sieht nicht nach falscher "Beschreibung" aus, oder? Woran könnte es sonst noch liegen? 😕

    Danke für jede Hilfe,
    Phil



  • phil_z schrieb:

    m_wavelengthCount = i;

    Bist du sicher, dass diese Zuweisung so richtig ist?
    Welchen Wert hat i an dieser Stelle?



  • Eigentlich schon, i hat an dieser Stelle den wert 1.
    also i = 1 .



  • Also beim Debuggen sehe ich das in der Zeile

    tabText.Format(_T("%8.3f"),m_wavelengths[i]);
    

    i noch immer 1 ist und m_wavelengths[0] = -1.4568160000000e+144

    Könnte das der Fehler sein?



  • Hilft es vielleicht, den Wert direkt auf ein double zu casten?

    tabText.Format(_T("%8.3f"), (double) m_wavelengths[i]);
    


  • Hey das hat tatsächlich irgendwas verändert...

    wenn ich jetzt debugge oder auch "run mach" (weißt scho) läuft es ohne die Meldung durch und gibt mir aber am Schluss dann ein

    Error inserting data in Database!

    The error-message is:
    -1104 Your insertion was unsuccessful, but database was able to recover by itself. Database is open for further entries, but you should concact your System Administrator

    Allerdings wenn ich die .exe von meiner eigentlichen Anwendung starten lasse, kommt noch immer die selbe Assertion... wie kann das? 😕

    Aber Danke schon mal für den casting tip 🙂



  • Deine eigene Anwendung startet vielleicht noch eine nicht aktualisierte EXE.

    Bei der Datenbank-Fehlermeldung kann ich Dir leider nicht helfen, da hilft nur Debuggen.



  • Die .exe ist schon die gleiche, die habe ich rüber kopiert (schon 2 mal jetzt) allerdings werden der exe noch irgendwie Argumente übergeben, da es 2 verschiedene Tests gibt, die beide diese gleiche .exe benutzen. Der Witz ist, dass der Ch1 Test immer funktioniert, aber der Ch2 Test eben nicht.

    Mei ich glaub der Fehler ist da noch nicht ganz gelöst. Es werden halt eine ganze Menge Daten in die DB geschrieben, da ist es nicht so leicht heraus zu finden welcher Wert Probleme macht...

    Naja ich werde noch mal weiter schauen und evtl. weiter posten wenn ich Neuigkeiten habe.
    Tausend Danke aber schon mal für Deine Hilfe!!!

    Beste Grüße,
    Phil



  • Kann es sein, dass die Format-Anweisung noch an einer anderen Stelle im Code auftaucht? Du kannst übrigens der Anwendung beim Debuggen in VC auch Argumente übergeben. Damit kannst Du den zweiten Fall (Ch2 Test) auch debuggen.



  • Ich habe alle .Fomrat anweisungen mit "(double)" versehen aber das Ergebnis ist das gleiche. Ich habe festgestellt dass auch wenn ich die .exe im Debug Ornder starte (via Doppelklick) kommt die Assertion Meldung. Genau wie beim Starten aus der Anwendung. Aber Deguggen kann ich und beim klick auf "Run" läufts auch durch.... (abgesehen vom DB Fehler dann).... komisch oder?



  • Oh je....

    ich habe den Fehler gefunden... habe allerdings KEINE Ahnung wie und warum der Fehler überhaupt existiert.
    Folgendes:
    Das Program holt sich Informationen aus ini.files und die aus der Registry. Irgendwie (warum auch immer) war der Pfad für das .ini falsch aus dem ..\ini\.. wurde ...\bin\... gemacht. Das muss aber geschehen sein nach dem das Programm einmal durch gelaufen ist... weil egal auf welchem Rechner ich es laufen lassen habe, lief es genau ein mal und dann nimmer. Jetzt hab ich den Registry Eintrag geändert und es läuft problemlos.... das ergibt überhaupt keinen Sinn.

    Aber egal, ich bin happy und sehr, sehr Dankbar für die Unterstüzung hier im Forum!!!! DANKE!!!

    🙂

    Phil


Anmelden zum Antworten