Fehler: "Access Violation"
-
Joa, sieht gut aus. Versuch mal.

Ich finde es erstaunlich, dass das mit dem Button funktioniert hat - gibt schon interessante Phänomene.

RTTI heißt RunTime Type Information. Damit erkennt dein Programm zur Laufzeit, ob der Cast funktioniert hat oder ob du versuchst, aus Schuhen Äpfel zu casten.
-
ich glaube so langsam beginne ich zu verstehen ^^
CFunctionDlg* pDlg = (CFunctionDlg*)AfxGetMainWnd();ist scheinbar auch "murks", denn wenn ichs richtig verstehe bekomme ich damit einen pointer auf mein MainFrame aber mit dem falschen typ (nähmlich CFunctionDlg).
somit stehen mir anschließend unter pDlg zwar die funktionen von CFunctionDlg zur verfügung, obwohl ich mich eigentlich im CMainFrame befinde... ??? oder???müßte also dann so aussehen:
CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd();ich vermute, dass die zuweisung eines hWnd-wertes im Debuger (z.b für pFrm {CMainFrame hWnd=0x00140430}) ein indiz dafür ist dass das geklappt hat ???
weiter mit
CDevTab* pTab = (CDevTab*)pFrm->m_wndSplitterL.GetPane(0,1);solte ich an mein linkes Pane des Splitters kommen können (ebenfals hWnd=0x00...)
und wo ich schon mal so in fahrt war hab ich gedacht ich kann so weitermachen um an meinen dialog zu kommen, der sich ja auf einem TabCrtl in diesem Pane befindet, doch
CFunctionDlg* pDlg = (CFunctionDlg*)pTab->m_TabCtrl.GetItem(1);bringt mir den Fehler:
"C2228: Der linke Teil von '.GetItem' muss eine Klasse/Struktur/Union sein"
(include ist vorhanden, keine schreibfehler)
der dialog wird so in das TabCtrl eingebunden.void CDevTab::CreatePages() { CDialog* dlg; dlg = new CFunctionDlg; ASSERT(dlg); m_DlgArray.Add(dlg); VERIFY(dlg->Create(IDD_FUNCTION_DIALOG, m_TabCtrl)); ...könnt ihr mir helfen?
kennt sich jemand damit aus?
irgendwelche tipps?danke schon mal - danke auch an alle die mir bis jetzt so geduldig geholfen haben.
-
BINGO! ich habs!
hab bei der erstellung der Tabs ein pointer-array auf die einzelnen dialoge angelegt, über dass ich dann wieder auf den dialog zugreifen kann:
also nochmal für alle zum nachlesen:
//pointer auf Hauptfenster CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd(); //pointer auf WndSplit-Pane CDevTab* pTab = (CDevTab*)pFrm->m_wndSplitterL.GetPane(0,1); //pointer auf pointer-array auf dialoge des TabCtrl CFunctionDlg* pDlg = (CFunctionDlg*)pTab->TabDlg[0]; //aufrufen der Funktion pDlg->MyOnFunction();nochmal VIELEN DANK an ALLE für die vielen tipps.
-
Hihihiihihihihi
Hast de das selber dir ausgedacht, oder nur aus dem anderen Thread hier, wo ich einen sehr ähnlcihen, ein wenig komplizierteren Lösungsvorschlag gegeben hab, kopiert?Naja... was solls... mach aber noch ne Fehlerüberprüfung rein!
-
nee, habs selber hingefriemelt. hat auch ne ganze weile gedauert. von dem anderen thread hättst mir ruhig früher erzählen können.

was meinst du mit fehlerüberprüfung? ne simple if abfrage ob die pointer gesetzt sind?