Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi, mein Programm stürtzt beim öffnen eines neuen Dialogs ab und ich kann mir nicht erklären wieso. Es ging die ganze Zeit.

Hab ein Haltepunkt bei OnInitDialog gesetzt, aber das wird erst garnicht erreicht.

Das hier ist die Absturzstelle aber das sagt mir garnix:

	if (hWndCtrl == NULL)

	{

		TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);

		ASSERT(FALSE);

Könnt Ihr mir weiterhelfen? Woran könnte es liegen?

Gruß, Filou

Geschrieben
Das hier ist die Absturzstelle aber das sagt mir garnix:
Es wäre sehr hilfreich gewesen, wenn du dazu geschrieben hättest, in welcher Datei bzw. Funktion dieser Code steht.

Ich vermute, du hast in deiner DoDataExchange-Methode einen Datenaustauschbefehl für ein Steuerelement, das nicht (mehr) da ist.

Geschrieben

Oh Sorry!! Es steht in der Datei dlgdata.cpp

Line: 43

Die Funktion heißt: HWND CDataExchange::PrepareCtrl(int nIDC)

Wi egehe ich jetzt vor?

Soll ich alle Steuerelemente aus dem Dialog löschen?

Ich kanns mir nicht erklären. habe nämlich eigentlich nix geändert.

Kann ich irgendwie sehen an welchem Steuerelement das liegt?

Geschrieben
Soll ich alle Steuerelemente aus dem Dialog löschen?
Nein.

Ich kanns mir nicht erklären. habe nämlich eigentlich nix geändert.
Jaja, das kenn' ich :D

Kann ich irgendwie sehen an welchem Steuerelement das liegt?
Ja. Wenn du das Programm im Debugger startest, kannst du in der Ausgabe die Trace-Meldung

TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);
sehen. Da drin steht die ID des Steuerelements, das an dem Ärger schuld ist. Du kannst dir auch nIDC auch einfach im Debugger ansehen.

In der resource.h kannst du die symbolische Konstante für diese Zahl raussuchen.

Geschrieben

Ok, ok... ich hab doch was gemacht.

Lag an einem Static das bei doppelklick eine Funktion aufruft.

Die hatte ich umbenannt.

Habs nicht gleich gem,erkt weil ich in der zwischenzeit weiter programmiert hatte :rolleyes:

Ich schäme mich auch :hells: :)

Danke Dir!!

  • 4 Jahre später...
Geschrieben (bearbeitet)

Ich hab den selben Fehler auch - ich hab bereits die komplette Klasse und Listview neu erstellt (mit dem Klassenassisstent, danach die alten Methoden etc. reinkopiert), wenn ich im Resource-Editor auf das Fenster klicke springt er auch korrekt in meinen Quelltext, daran liegts also nicht. Ich hab bereits mit den .rc-Dateien herumgespielt aber daran kann es auch nicht liegen wiel Einzig und Allein die Listview spinnt, alles andere funktioniert perfekt. Spaßeshalber hab ich meiner IDC_LIST1 mal die Zahl 4711 gegeben - keine Änderung ... hat jemand Vorschläge?

Infos :


  • die Klasse die die Resource "haben" soll ist abgleitet von CDialogEx
  • die resource selbst :
    IDD_MEINWINDOW DIALOGEX 0, 0, 317, 196
    
    STYLE DS_SETFONT | DS_FIXEDSYS | DS_NOFAILCREATE | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
    
    EXSTYLE WS_EX_NOPARENTNOTIFY | WS_EX_APPWINDOW
    
    CAPTION "Mein Titel hier"
    
    FONT 8, "MS Shell Dlg", 400, 0, 0x1
    
    BEGIN
    
        CONTROL         "Info-Meldungen",IDC_INFO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,6,67,10
    
        CONTROL         "Warnungen",IDC_WARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,90,6,53,10
    
        CONTROL         "Fehlermeldungen",IDC_ERROR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,174,6,71,10
    
        CONTROL         "DEBUG",IDC_DEBUG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,270,6,36,10
    
        CONTROL         "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,6,18,306,174
    
    END



  • Klassendeklaration = Standard, vom Klassenassistenten über den Resource-Editor
  • Membervariable für das ClistCtrl = erstellt und als private in der Klasse

Lag an einem Static das bei doppelklick eine Funktion aufruft.

Die hatte ich umbenannt.

Was? Kannst du das (falls du hier noch aktiv bist) mal erläutern? Was hast du damals gemacht VOR und NACH dem Fehler?

Bearbeitet von registrierenFürNDokument
Weil?
Geschrieben
(...)

Das Problem ist behoben, die Ursache war folgende :

Ich erstelle in einer Dummy-Klasse (erbt von CWnd) beliebig viele CDialogs (eigentlich CDialogEx) - es wird somit eine Resource (die eines kompletten Fensters) "aktiviert" und angezeigt die nicht immer (bisher : überhaupt nicht) den selben Inhalt hat - manche habe Listviews, andere wiederum nicht; ausserdem gilt die ID für meine listview sowieso nur für eine einzige Instanz, ist ja logisch - soweit war ich auch schon ;).

Das Problem ist nun dass die Entität, die beim Laden / Erstellen einer Resource (Ich mach es direkt in CDialog::Create) im RAM erstellt wird auch erst wirklich DANN existiert wenn der entspr. Punkt im übersetzten Quelltext erreicht ist - bei mir kann das zu einer beliebigen Zeit sein, nicht unbedingt nach dem Start der App. Erst wenn diese Entität im RAM liegt (daher : wenn der CDialog auch wirklich Create() erreicht) ist die listview gültig ... die komplette Control-resource ist also abhängig von Laufzeitcode .... das finde ich persönlich sehr seltsam aber nun gut

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...