MDI-Mainframe in einer .dll realisierbar?



  • Hallo,

    ich müsste eine komplett eigenständige MDI-Anwendung mit eigenem Mainframe in eine .dll auslagern. Der Frame soll dann von einer .exe aus von Dialogen oder anderen MDI-Anwendungen aus aufgerufen werden können.
    Nun meine Frage: ist das überhaupt möglich?
    Ich habe mir eine kleine .exe geschrieben, die den Frame in der .dll mit der MDI aufruft. Soweit alles klar, der Frame erscheint. Wenn ich aber versuche, ein neues Dokument über das Menü anzulegen, erhalte ich eine Debug-Assertion (wincore.cpp, Zeile 833):

    // should be a normal window
    		ASSERT(::IsWindow(m_hWnd));
    
    		// should also be in the permanent or temporary handle map
    		CHandleMap* pMap = afxMapHWND();
    		ASSERT(pMap != NULL);
    
    		CObject* p;
    		ASSERT((p = pMap->LookupPermanent(m_hWnd)) != NULL ||
    			(p = pMap->LookupTemporary(m_hWnd)) != NULL);
    		ASSERT((CWnd*)p == this);   // must be us
    
    		// Note: if either of the above asserts fire and you are
    		// writing a multithreaded application, it is likely that
    		// you have passed a C++ object from one thread to another
    		// and have used that object in a way that was not intended.
    		// (only simple inline wrapper functions should be used)
    		//
    		// In general, CWnd objects should be passed by HWND from
    		// one thread to another.  The receiving thread can wrap
    		// the HWND with a CWnd object by using CWnd::FromHandle.
    		//
    		// It is dangerous to pass C++ objects from one thread to
    		// another, unless the objects are designed to be used in
    		// such a manner.
    

    Bei der vorletzten Assertion fliegt er raus, das m_hWnd ist belegt und die Lookups liefern (zumindest im Debugger) auch ein Ergebnis zurück.

    Hatte vielleicht schon mal jemand ein ähnliches Problem oder kann sich jemand vorstellen, was hier falsch läuft?

    Vielen Dank
    Peter


Anmelden zum Antworten