UpdateData(false); -> Debug Assertion Failed



  • Lösung: Verwende keine anderen Threads. Arbeite nur mit Handles... etc.

    Darauf habe ich keinen Einfluss. Habe eine DLL geschrieben die von einer Anwendung verwendet wird. In InitInstance() wird der Dialog erzeugt mit Create. Mit einer Exportfunktion die auch wieder von der externen Applikation aufgerufen wird, wird auch unter anderem die Funktion UpdateData(false) aufgerufen.

    Wie soll ich hier nun vorgehen?


  • Mod

    Sicher hast Du Einfluss!
    Ruf eben nicht UpdateData auf!

    In Deiner MFC Anwednung sind auch nur Handles.
    Mach es mit der Windows API und es geht.



  • Sondern ich rufe was auf. Sorry aber ich habe gerade keine Idee wo ich nun angreifen soll.


  • Mod

    SetWindowText... etc. Am Besten liest Du Dich ein wenig in die Windows API ein...



  • SetWindowText habe ich doch schon verwendet. Aber dazu habe ich ja auch meine Bedenken geäussert.

    Und desweiteren ist das aber nicht der Lösungsansatz den du mir zuerst geraten hast:

    Verwende keine anderen Threads. Arbeite nur mit Handles... etc.


  • Mod

    visualer schrieb:

    SetWindowText habe ich doch schon verwendet. Aber dazu habe ich ja auch meine Bedenken geäussert.

    Und desweiteren ist das aber nicht der Lösungsansatz den du mir zuerst geraten hast:

    Verwende keine anderen Threads. Arbeite nur mit Handles... etc.

    Bedenken? Wo hast Du Bedenken geäußert?

    Du hast SetWindowText wieder verwendet und nimmst wiederum MFC Objekt, die threadafin sind, also nur gültig sind im Thread, der Sie erzeugt hat?

    Woher soll ich bitte wissen, dass Deine Anwednung aus beliebigen Threads kruz und quer Deine Anwendung aufruft.
    Hast Du gesagt, dass Du keine Kontrolle hast über die Anwednung? Nein!

    Verwende keine Cross-Thread-Calls ist die einfachste Lösung. Punkt!
    Wenn Du Herr (Codeowner) der Applikationen bist, kannst Du auch dafür sorgen!

    Meine Glaskugel steht bei mir zu Hause auf dem Fensterbrett. Hier bei der Arbeit habe ich keine...



  • Also aus deinen Meldungen werde ich nicht schlau.

    Bedenken? Wo hast Du Bedenken geäußert?

    Ich habe ein Beispiel mit SetWindowText gebracht und habe gemeint dass dies meinen Code aufbläht.

    Du hast SetWindowText wieder verwendet...

    Ist das nun ein Vorwurf. Hast doch selber vorher gesagt ich soll es verwenden:

    SetWindowText... etc. Am Besten liest Du Dich ein wenig in die Windows API ein...

    Hast Du gesagt, dass Du keine Kontrolle hast über die Anwednung? Nein!

    Doch habe ich.

    Meine Glaskugel steht bei mir zu Hause auf dem Fensterbrett.

    Aber lesen sollte man am Arbeitsplatz können oder das Hirn auch auf der Fensterbank gelasen.

    Vergiss es. Man hat mich schon gewarnt vor deinen komischen Aussagen.



  • Um das ganze mal zu entschärfen. Und entschudligung das ich mich hier auch einmische. Habe das ganze auch verfolgt und habe ein ähnliches Problem.

    Was ich aber auch nicht ganz verstanden habe: Soll nun SetWindowText() verwendet werden oder nicht?



  • Es gibt SetWindowText() (API) und es gibt CWnd::SetWindowText() (MFC)!


  • Mod

    gute nacht johni schrieb:

    Um das ganze mal zu entschärfen. Und entschudligung das ich mich hier auch einmische. Habe das ganze auch verfolgt und habe ein ähnliches Problem.

    Was ich aber auch nicht ganz verstanden habe: Soll nun SetWindowText() verwendet werden oder nicht?

    Es sollen nach möglichkeit KEINE MFC Funktionen verwendet werden, sondern Windows API. Also SetWndowText!
    Was ist daran unklar?

    Genau wie connan schreibt! Es gibt SetWindowText mehrfach ⚠


  • Mod

    visualer schrieb:

    Vergiss es. Man hat mich schon gewarnt vor deinen komischen Aussagen.

    Jo! Und tschüss! 🕶



  • Es gibt SetWindowText() (API) und es gibt CWnd::SetWindowText() (MFC)!

    Achso jetzt wird mir das klar. 😉

    Darf ich jetzt auch nochmal was fragen. Wenn ich nun in meiner Dialogklasse SetWindowText aufrufe dann verwende ich ja die von MFC. Wie greife ich nun aber auf die Api Funktion zu.



  • Also was ich bereits gemacht habe ist "Windows.h" included. So wenn ich nun aber SetWindowText() aufrufe wird immer noch auf die SetWindowText der MFC verwendet.

    Muss ich da noch was definieren?



  • Hallo,

    eine C++-Grundlagenforschung würde ergeben: Man verwendet den ::-Operator, um auf solche Funktionen zuzugreifen.

    MfG,

    Probe-Nutzer



  • Jo. Aber auf welchen Namenraum oder Klasse?



  • kein Namensraum, das ist ja das entscheidende hier:

    http://msdn.microsoft.com/en-us/library/b451xz31(VS.80).aspx

    MfG,

    Probe-Nutzer



  • Oje. Jetzt habe ich mich reichlich plamiert. Logisch. Jetzt traue ich mich gar nicht mehr zu fragen.
    Machs aber trotzdem: Was gebe ich nun dem SetWindowText als HWND mit. Klar dass von meinem Controll aber wie bekomme ich das.



  • GetSafeHwnd() ist eine Möglichkeit oder Du greifst direkt auf den m_hWnd Member des Controls zu.



  • Super vielen Dank. Jetzt nur noch eine kleine Frage. Gibt es auch noch eine weitere Funktion um Textfelder zu setzten nur mit Zahlenwerten oder muss ich dazu meine int Werte in einen String formatieren?



  • Zu früh gefreut. Funktioniert nicht:

    CWnd *wndtest= GetDlgItem(IDC_EDIT_TEST);
    ::SetWindowText((HWND)wndtest,"test");
    

    In meinem Textfeld steht leider nichts drin.


Anmelden zum Antworten