ich habe eine MFC-DLL. Diese wird von einer MFC MDI-Anwendung eingebunden. Innerhalb meiner MFC-DLL möchte ich die aktive View der Anwendung bestimmen.
vielen Dank für deine Antwort. Leider klappt es auch nicht. Allerdings ist es schon etwas besser. Für pFrame kommt laut Debugger ein vernünftiger Wert raus. pChild hat allerdings den Wert 0x0000000. Deshalb stürzt es erst eine Zeile später ab, da dann versucht wird mit einem ungültigen pChild die aktive View zu bestimmen.
Hi! Hmm. Du kannst versuchen den this zeiger des CMDIChildWnd an eine DLL Funktion zu übergeben. Ansonsten fällt mir leider nichts mehr ein. Ich habe immer die ganze View Klasse in eine DLL gegeben und hatte damit eigentlich nie Probleme
das problem gabs schonmal, da muss man sich das Child über ein HWND und "FromHandle" holen, dann sollte es gehen. Diese *GetActive usw Funktionen funktionieren meist nicht korrekt wenn man auf Variablen von "außerhalb" zugreift -- class God : public ChuckNorris { };
vielen Dank für deine Antwort. Leider verstehe ich es nicht ganz. Warum ist man wieder beim gleichen Problem? Klappt das Holen des Childs nicht? Ich wüsste inzwischen eine Möglichkeit, dass meine DLL immer das HWND der gerade aktiven View enthält. Weisst du dann eine Lösung?
Vielen Dank für deinen Einsatz. Find ich echt super, dass du dir so viel Zeit nimmst, um mir weiterzuhelfen.
Hi Dirk! Ich helfe doch gerne Ich bekomme bei mir einen gültigen Child Pointer. Mit nem HWND bekommst du ein CWnd CWnd *pWnd = CWnd::FromHandle(hWnd); Wenn du das wnd hast könntets du versuchen mit GetActiveView den View Pointer zu holen. Ich habs bei mir einwenig anders gemacht: ich hab in der exe eine Funktion angelegt die mir den aktuellen View zurückliefert. Diese habe ich (wie oben im Src gezeigt) in der DLL aufgerufen. Klappt wunderbar.
noch ein paar Fragen dazu. Wie kann ich mit einem pWnd die GetActiveView Funktion aufrufen? Diese gibt es doch in der CWnd-Klasse gar nicht. Mit der Funktion, die dir die aktuelle View zurückliefert. Meinst du damit diesen Code?
Denn im oberen Codeblock sehe ich nirgends einen Aufruf einer Funktion aus der exe. Denn dort scheint dies bereits vorher geschehen zu sein, da m_pChildView bereits gesetzt ist.