Program Bug
-
Hallo,
ich habe einen Programmchen erstellt, mit hilfe von MFC.Es ist "Einzel Dokument" mit der Klasse "CHtmlView". Ich habe zusetzlich einen Dialog-Fenster gebaut, der seine eigene Klasse "CVerbindung" abgeleitet von CDialog hat. In dem Dialog-Fenster soll man den Server, ein Paar andere Opzionen wählen. Am Ender bildet alles zusammen einen "LINK".
Und jetz DAS PROBLEM:
IN DEM DIALOG-FENSTER SOLLTE BEIM KLIKEN DER OK TASTE, DAS LINK ZU DER FUNKTION "Reqest(CString Link)" witer geleitet:
// Verbindung.cpp #include "E_Learn.h" #include "E_LearnDoc.h" #include "Verbindung.h" #include "E_LearnView.h" ... ... void CVerbindung::OnOK() { // TODO: Zusätzliche Prüfung hier einfügen UpdateData(TRUE); /* gewählte Option vom ComboBox holen*/ int index; CString OptionName; index = m_cCombo.GetCurSel(); m_cCombo.GetLBText(index, OptionName); /* Verbindung zum Link aufbauen*/ CString Link; Link= "http://" + m_strServer + "/servlet/statisticsgateway?QUERYID=" + OptionName + "&USERID=" + m_strBenutzer + "&PASSWD=" + m_strPasswort; CE_LearnView *ptr = NULL; ptr->Request(Link); CDialog::OnOK(); }
// E_LearnView.h ... ... protected: afx_msg void Request(); ... ..
// E_LearnView.cpp #include "E_Learn.h" #include "E_LearnDoc.h" #include "Verbindung.h" #include "E_LearnView.h" ... ... void CE_LearnView::Request(CString Link) { Navigate2(Link,0,NULL); // MessageBox("EHOOOO"); }
Es wird alles compiliert keinen Problem. Aber bei ausführen das Programm kommt es zu Fellermeldung. Das Link wird nicht angezeigt. Aber das MessageBox funktionirt, wenn man Navigate2 auskomentiert.
Könnte mir bitte jemand einen Rat geben, was ich falsch gemacht habe !!!
Danke
Edit wegen sfds
-
/* Verbindung zum Link aufbauen*/ CString Link; Link= "http://" + m_strServer + "/servlet/statisticsgateway?QUERYID=" + OptionName + "&USERID=" + m_strBenutzer + "&PASSWD=" + m_strPasswort; CE_LearnView *ptr = NULL; ptr->Request(Link);
Erst ptr auf NULL setzen und dann versuchen eine Funktion der Klasse CE_LearnView aufzurufen? Das dürfte eigentlich nicht gehen!
Versuch doch mal per GetParent() einen Zeiger auf deine View zubekommen...
-
Danke für den Rat Hexagon,
mit GetParent() habe ich nicht geschaft, aber ich habe einen anderen Rat bekommen den ich UNTEN presentiere.Danke noch mall !!
// ******** LÖSUNG ********/ void CVerbindung::OnOK() { // TODO: Zusätzliche Prüfung hier einfügen UpdateData(TRUE); /* gewählte Option vom ComboBox holen*/ int index; CString OptionName; index = m_cCombo.GetCurSel(); m_cCombo.GetLBText(index, OptionName); /* Verbindung zum Link aufbauen*/ CString Link; Link= "http://" + m_strServer + "/servlet/statisticsgateway?QUERYID=" + OptionName + "&USERID=" + m_strBenutzer + "&PASSWD=" + m_strPasswort; //****** DAS TRICK *******// CView *ptr = ((CFrameWnd *)AfxGetMainWnd())->GetActiveView(); if( ptr && ptr->IsKindOf(RUNTIME_CLASS(CE_LearnView) )) { ((CE_LearnView *)ptr)->Request(Link); } CDialog::OnOK(); }