Programm startet nicht mehr auf Windows 2003


  • Mod

    Schon mal versucht, nach DoModal ein GetLastError einzubauen und zu prüfen was passiert?



  • Das Programm gibt bei GetLastError zurück, dass der Vorgang
    erfolgreich beendet wurde.
    Nachdem ich GetLastError eingebunden habe erscheinen plötzlich auch
    die nachfolgenden Messageboxen, die sonst nie angezeigt wurden.

    INT_PTR nResponse = dlg.DoModal();
    

    nResponse liefert was anderes zurück als IDOK oder IDCANCEL und zwar "-1".
    Danach beendet das Programm.

    Ich muss dazu sagen, dass ich gelgentlich folgende Compilermeldung erhalte.....:

    Fehler 1 Fehler "31" wurde von "C:\Programme\Microsoft SDKs\Windows\v6.0A\bin\mt.exe" zurückgegeben. Projekt Testfall



  • Kurzer Nachtrag:

    An int value that specifies the value of the nResult parameter that was passed to the CDialog::EndDialog member function, which is used to close the dialog box. The return value is –1 if the function could not create the dialog box, or IDABORT if some other error occurred, in which case the Output window will contain error information from GetLastError.

    GetLastError kann ich ja danach gar net mehr aufrufen, da dass Programm beendet wird. Oder wie ist das gemeint? Wie soll ich für

    CtestfallDlg dlg;
    m_pMainWnd = &dlg;
    

    GetLastError abfragen, wenn das Programm danach sofort geschlossen wird? 😕



  • Möglicherweise ein Fehler beim Einbinden des Manifests?


  • Mod

    Hast Du evtl. ein RTF Control drauf oder ein ActiveX Control das nicht registriert ist.

    Und sicher kannst Du GetLastErrornoch aufrufen. Das Programmstürzt doh nicht ab. Es beendet doch kontrolliert.



  • Hallo Martin,

    ich mache es sicher falsch mit GetLastError:

    CtestfallDlg dlg; 
    m_pMainWnd = &dlg;
    
    INT_PTR nResponse = dlg.DoModal();
    
    	LPVOID lpMsgBuf;
    
    	if (!FormatMessage( 
    		FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    		FORMAT_MESSAGE_FROM_SYSTEM | 
    		FORMAT_MESSAGE_IGNORE_INSERTS,
    		NULL,
    		GetLastError(),
    		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    		(LPTSTR) &lpMsgBuf,
    		0,
    		NULL ))
    	{
    	}
    	MessageBox( 0,(LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
    	LocalFree( lpMsgBuf );
    
    	if (nResponse == IDOK)
    	{
    		MessageBox(0,"OK!",0,0);
    
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		MessageBox(0,"CANCEL!",0,0);
    
    	}else
    	{
    		CString g;
    		g.Format("%i",nResponse);
    		MessageBox(0,g,0,0);
    	//rückgabewert ist "-1"
    	}
    

  • Mod

    Du hast ein Problem!
    Die Messageboxen werden nicht mehr angezeigt, wenn WM_QUIT gepostet wurde.

    Kommentiere mal die Zeile:

    m_pMainWnd = &dlg;
    

    in Deinem InitInstance testweise aus.



  • Ich habe es testweise dann mal auskommentiert. Am Laufverhalten ändert sich jedoch nichts.

    Unser Admin schaut sich momentan mit dem Prozessmonitor von sysinternals das
    genauer an. Was ich soweit gesehen habe ist, dass NAME NOT FOUND öfter auftaucht
    für:

    TestfallDEU.dll oder auch TestfallLOC.dll bzw. Testfall.exe.2.manifest

    Und noch einige weitere Dateien, die ich nichtmal kenne 😕

    Habe eben dann eine manifest-Datei neben die EXE kopiert. Auch keine Änderung.
    Die Testfall.exe selbst hat ein manifest eingebettet bekommen:

    In "RT_MANIFEST" unter Nr "1" steht folgendes:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="X86"
    name="Testfall"
    type="win32"
    />
    <description>Beschreibung</description>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity
    type="win32"
    name="Microsoft.Windows.Common-Controls"
    version="6.0.0.0"
    processorArchitecture="X86"
    publicKeyToken="6595b64144ccf1df"
    language="*"
    />
    </dependentAssembly>
    </dependency>
    </assembly>


  • Mod

    Das hat damit gar nichts zu tun.

    Könntet Ihr nicht etwas strukturierter vorgehen?
    Euer Problem ist doch warum der Diaog nicht angezeigt wird?
    Also wäre der nächste Schritt zu prüfen ob überhaupt WM_INITDIALOG versendet wird...

    Was wird denn nun von GetLastError ausgegeben, wenn DoModal mit -1 beendet wird?
    Du hast zwar Code eingabut der etwas anzeigt, aber nicht geschrieben was passiert!



  • Aktueller Stand ist:

    Bis OnInitDialog komme ich gar nicht (das entspricht doch WM_INITDIALOG oder?). Das Programm wirft schon nicht mal mehr
    die MessageBox nach:

    //in InitInstance()
    INT_PTR nResponse = dlg.DoModal();
    MessageBox("nach dlg.DoModal()");
    

    Auch mein GetLastError wird an der Stelle wo jetzt die MessageBox
    zu sehen ist nicht mehr verarbeitet.


Anmelden zum Antworten