cipaddressctrl & debug assertion failure
-
hallo!
wer kann mir helfen? hab ein problem und im moment keine ahnung über die lösung.
ich hab eine mfc-anwendung von cformview abgeleitet. zusätzlich hab ich ein dialogfenster mit dazugehöroger klasse. in dem dialogfenster soll eine ip-adresse abgefragt werden. die variable ist vom typ cipaddressctrl.
wenn ich jetzt versuche aus der mainframeklasse den dialog aufzurufen klappt das (domodal).
wenn ich mir die eingegebene ip zurückgeben lassen will mit getaddress bekomme ich die fehlermeldunger steigt an folgender stelle aus: ASSERT(::IsWindow(m_hWnd)); (in der winctrl6.cpp).
ich müsste auch mit setaddress etwas in die box hineinschreiben, aber auch das klappt nicht. ähnliche fehlermeldung, er steigt an einer gleichen quelltextstelle aus.ich weiss das sich um ein ungültiges window-handle handelt, ich weiss aber nicht wie ich das beheben kann.
vielen dank im vorraus..
Jens
-
Du kannst auf Controlvariablen nicht mehr zugreifen, wenn der Dialog zu ist. Schreib den Inhalt in OnOK in eine Datenvariable und frag die dann ab.
Erklärung: Wenn der Dialog geschlossen wurde, wurden auch alle zugehörigen Fenster "zerstört". Die sind nicht mehr benutzbar.
-
hallo!
hab es ausprobiert hab den code in OnOK geschrieben. Der Dialog ist zwar noch offen (Fenster wird noch angezeigt), aber es klappt trotzdem nicht. ich bekomm die selbe fehlermeldung.
void CNetzwerkDlg::OnOK() { // TODO: Zusätzliche Prüfung hier einfügen CIPAddressCtrl IPCtrl; BYTE IPG_1=0, IPG_2=0, IPG_3=0, IPG_4=0; IPCtrl.GetAddress(IPG_1, IPG_2, IPG_3, IPG_4); CDialog::OnOK(); // Hier wird Dialog geschlossen, oder? }mach ich einen üblen denkfehler, oder woran liegts?
ich bitte um weitere hilfe! vielen dank!
Jens
-
Ups, da hatte ich es wohl nicht gut genug erklärt.

Also, nochmal langsam:
Du legst über den Klassenassistenten eine Controlvariable für dein IP-Control an. (Die Variable in OnOK hat doch nix mit deinem Eingabefeld zu tun.)
Vielleicht gibt es da ja auch die Möglichkeit, eine Wertevariable anzulegen, dann kannst du auf die zugreifen und dir den Code in OnOK sparen.
Sonst war der Ansatz schon gut.

Bei Schwierigkeiten melde dich nochmal.
-
Es hat geklappt
!war meine doofheit
, hatte ne neue instanz gebildet und nicht auf die controlvariable (welche ja auch ne instanz von cipaddressctrl ist) zugegriffen. es scheint jetzt zu funktionieren, hoffe ich.jetzt kann ich das ganze zwar auslesen, aber wie bekomme ich eine ip-adresse in das feld hineingeschrieben? an welcher stelle übergebe ich am besten die werte für die jetzige ip?
ich kann keinen oninitdialog erstellen, zumindest nicht aus der assistenzliste von c++ wo man sowas normalerweise macht. kann ich das manuell machen, oder gibt es eine andere möglichkeit (stelle) wie ich die ip da rein bekomme?aber vielen dank schonmal für den ersten teil der lösung!
jens
-
OnInitDialog heisst beim CFormView ja auch OnInitialUpdate

-
ne, hab mich vielleicht schlecht ausgedrückt. ich brauch nich den oninitialupdate des cformview, sondern ich brauch etwas was aufgerufen wird wenn ich den kleinen dialog zur ip-adressen-eingabe aufrufe, damit die ip-adresse in dem dialog (in dem ip-feld) angezeigt wird.
das könnte ich doch theoretisch im oninitdialog machen, den kann ich aber irgendwie nicht automatisch erstellen lassen.
weisst du was ich meine?
ich kann ja wieder nicht auf die controlvariable zugreifen solange das fenster zu ist.Jens
-
Dann mach das doch auch über Wertevariablen

Leg mal richtige Membervariablen in deinem Dialog an und die kannst du dann auch von aussen setzen.
Im Dlg-Header:
BYTE m_nIPG_1; BYTE m_nIPG_2; BYTE m_nIPG_3; BYTE m_nIPG_4;Im Dlg-Cpp:
- Im Konstruktor mit 0 initialisieren.
- In OnInitDialog (nach Aufruf der Basisklasse) in das Control schreiben
- In OnOK (wie gehabt) die Werte aus dem Control auslesenUm den Aufruf herum:
CDeinDialog dlg; // Die Adresse vorbelegen dlg.m_nIPG_1 = 192; dlg.m_nIPG_2 = 168; dlg.m_nIPG_3 = 1; dlg.m_nIPG_4 = 1; dlg.DoModal(); // Nun kannst du die Werte abfragenEigentlich sollte man das Setzen und Abfragen über Zugriffsfunktionen machen, aber ich hatte keine Lust, die auch noch zu schreiben. :p
Hoffe, dass ich dein Problem jetzt verstanden habe.
-
ja soweit passt das, nur muss ich die 4 einzelnen teile wieder zusammen fügen.
meine controlvariable heisst m_IPServer und ist vom typ cipaddressctrl. leider kann dieses ip-feld nichts anderes sonst wärs wesentlich einfacher.
diese zeile muss noch untergebracht werden:m_IPServer.SetAddress(m_nIPG_1, m_nIPG_2, m_nIPG_3, m_nIPG_4);das müsste während der initializierung des dialogs geschehen und dann müsste doch rein theoretisch das ip-feld auch meine ip anzeigen wenn der dialog erscheint!? ich weiss nur noch nicht wohin mit der zeile.
jens
-
Wie gesagt:
estartu_de schrieb:
Im Dlg-Cpp:
- In OnInitDialog (nach Aufruf der Basisklasse) in das Control schreibenGenau da soll die Zeile hin

-
ja genau, mein problem liegt jetzt da, das mein dialog keine oninitdialog besitzt und ich nicht weiss wie ich eine solche funktion erstelle.
bei "virtuelle funktion hinzufügen..." (dort erstellt man ja normalerweise solche fkten.) im steht sie nicht dabei . kann man die manuell erstellen und erfüllt sie dann hinterher auch ihren zweck?
wenn ja wie?Jens
-
Was ist das für ein seltsamer Dialog?

Geht das auch nicht mit dem Klassenassistenten?
---------------------
Alternative:
Nimm einen Dialog, wo du die Funktion hast und guck, welcher Quellcode dazugehört. Den übernimmst du in deinen Dialog. Wenn das wieder nicht geht, beschreib mal, was du alles gefunden hast.
Langsam bin ich echt neugierig, was du da für ein komisches Projekt hast

-
ne im klassenassistent hab ichs leider auch nicht gefunden.
hier im forum gibts ja anscheinend keine "private messages" dann hättest du mir deine mail-adresse schicken können, dann hät ich dich ein blick draufwerfen lassen.
ich hab in diesem projekt noch mehr dialoge, es geht bei keinem.
na dann werd ich mal den umständlichen weg gehen und es mir aus einem anderem projekt raussuchen. mal sehen wie weit ich komm.Jens
-
Lösch doch mal die clw-Datei in dem Verzeichnis mit deinem Projekt. Wenn du dann den Klassenassistenten aufrufst, erstellt er sie wieder neu. Das hilft manchmal.
Zum Thema Email: Hast du einen Yahoo-Account? Dann könnten wir chatten.
-
ja ich hab einen account, aber noch nie benutzt. hab einen yahoo! webmessenger gefunden, hilft mir aber irgendwie nicht weiter.
-
Wie heisst du da? Ich habe den selben Namen.
-
ich hab auch den selben namen (jensemann_79), vielleicht kannst du mich suchen.
ich habs geschafft, mein eigener oninitdialog funktioniert und die ip wird angezeigt

hät nicht gedacht das das so einfach ist, aber naja man lernt nie aus.jens
-
hab deine anfrage erhalten, zum chat sollte ich dich als friend hinzufügen, musste dafür son verschlüsseltes wort eingeben, das nimmt er bei mit nicht, da passiert garnichts.
ich denke deswegen konnte ich dich auch nicht finden.jens