nicht unterstützte operation
-
estartu_de schrieb:
Genauso wie eine Exe.

Projekt laden - Debugger starten - exe wählen - schon ist alles wie gewohnt.
na ja...das geht irgendwie nicht so ganz, die exe findet dann die dll nicht!?
-
theWeasle schrieb:
estartu_de schrieb:
Genauso wie eine Exe.

Projekt laden - Debugger starten - exe wählen - schon ist alles wie gewohnt.
na ja...das geht irgendwie nicht so ganz, die exe findet dann die dll nicht!?
oke...debuggen geht jetzt...

-
hmmm...habe alles "gedebuggt", hatte einen fehler in meiner ReplaceView-Methode. habe sie ersetzt. jetzt läuft alles ohne irgendeine fehlermeldung.
jedoch wird meine neue form beim wechsel nicht angezeigt...
Code ist von www.codeproject.com:BOOL CWkHostDoc::SwitchToView(CRuntimeClass * pNewViewClass) { CFrameWnd* pMainWnd = (CFrameWnd*)AfxGetMainWnd(); CView* pOldActiveView = pMainWnd->GetActiveView(); if (pOldActiveView->IsKindOf(pNewViewClass)) return TRUE; ::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, 0); CCreateContext context; context.m_pNewViewClass = pNewViewClass; context.m_pCurrentDoc = this; CView* pNewView = STATIC_DOWNCAST(CView, pMainWnd->CreateView(&context)); if (pNewView != NULL) { pNewView->ShowWindow(SW_SHOW); pNewView->OnInitialUpdate(); pMainWnd->SetActiveView(pNewView); pMainWnd->RecalcLayout(); pOldActiveView->DestroyWindow(); return TRUE; } return FALSE; }hatt jemand ne idee?
danke schön
-
Cool, das sieht aus, wie das Problem, mit dem ich mich noch in den Grundzügen rumkämpfe.
Zwischen Formviews umschalten? Richtig erkannt??
Dann sollte ich also als nächstes mal Codeproject erneut durchforsten.
Viel Erfolg noch
-
estartu_de schrieb:
Cool, das sieht aus, wie das Problem, mit dem ich mich noch in den Grundzügen rumkämpfe.
Zwischen Formviews umschalten? Richtig erkannt??
Dann sollte ich also als nächstes mal Codeproject erneut durchforsten.
Viel Erfolg noch
richtig erkannt!
ich denke mit dem code (siehe oben) schaltet er um, zeigt die neue form jedoch nicht an.
versuche mal weiter
-
Den Code benutze ich auch, nur in der MDI Version.
Damit es funktionierte habe ich aber einige Zeilen rumgedreht:pChild->RecalcLayout(); pNewView->UpdateWindow(); pChild->SetActiveView(pNewView); pNewView->OnInitialUpdate(); // nach hinten verschoben return TRUE;Dann funktionierte es.
-
habe jetzt rausgefunden, dass nicht der code schuld ist, dass die form nicht wechselt, sondern dass es an der dll liegt.
ohne dll läuft es und sobald ich die formview aus der dll lade, wird diese nicht angezeigt

-
Komisch, das kriege ich hin.
Behaken sich da deine Resourcen?

Also bei mir liegen die Resource und die dazu gehörende Klasse in der selben dll. Und das funktioniert bombig. Auch mit zwei Views (oder mehr).
Was für einen Projekttyp hast du eigentlich? Die Lösungen für MDI und SDI, die ich kenne, sind doch sehr unterschiedlich.
-
sdi app "host":
- doc/view support
- kein db support
- kein compound document support
- activeX controls support
- baseclass ist "CFormView"und dann die dll:
- MFC Extendsion DLL (using shared MFC DLL)in dieser dll habe ich die resourcen und klassen für meine FormView.
aus der sdi-app rufe ich die methode Init der dll auf um die RUNTIME_CLASS zu erhalten
extern "C" AFX_EXT_API int Init(CRuntimeClass** view) { new CDynLinkLibrary(Dll_frm_wineDLL); *view = RUNTIME_CLASS(MyWineForm); return 1; }scheint so als findet die sdi-app die resourcen der dll nicht.
denn die buttons etc. werden wie schon erwähnt nicht angezeigt.
-
nach unzähligem try and error habe ich es nun geschafft...

das problem waren die resourcen der dll, die nicht geladen wurden bzw. nicht verfügbar waren.
jetzt lade ich sie nach dem dll aufruf:
// DLL-Laden... // Altes Resourcen-Handle speichern HINSTANCE oldHandle = AfxGetResourceHandle(); // Neues Resourcen-Handle setzen (die DLL) AfxSetResourceHandle(GetModuleHandle("my_dll.dll")); // DLL-Methoden aufrufen, // FormView laden, // FormView umschalten // Resourcen-Handle zurücksetzen AfxSetResourceHandle(oldHandle);so funktioniert es bis jetzt

besten dank