CDialog in Erweiterungs-Dll packen

Nukleo

Mitglied
Ich habe das Ziel Dialoge als Plugins zu verwenden und später über LoadLibary() nachzunutzen. Dazu machte ich bislang folgendes:


... und dann rauchts.

in der Dialog-Klasse steht ja

C++:
// Dialogfelddaten
	enum { IDD = IDD_DIALOG1 };

diese IDD ist in der resource.h definiert. Wenn ich resource.h einbinde wird das Projekt erfolgreich kompiliert.

Anschließend erstelle ich mir eine mfc-dialog-app und will diesen Dialog wie folgt sichtbar machen:

C++:
typedef UINT ( * LPDLLFUNC)(CRuntimeClass**);
    LPDLLFUNC lpfnDllFunc = NULL;
    HINSTANCE hDLL = NULL;     	  
	CDialog *dlg;
    hDLL = LoadLibrary("FX1.dll");
    
    if(hDLL)
    {
        lpfnDllFunc = (LPDLLFUNC)::GetProcAddress(hDLL,"Init");
        if (!lpfnDllFunc)
		{
			AfxMessageBox("Function not found in DLL");
			FreeLibrary(hDLL);
			return;
		}
		CRuntimeClass* pNewViewClass;
		lpfnDllFunc(&pNewViewClass);
		ASSERT(pNewViewClass);

		 dlg = (CDialog*)pNewViewClass;
		 dlg->DoModal();
		
	}
    else
    {
        AfxMessageBox("Dll not found!");
    }

in der Zeile dlg->DoModal(); ist nun endgültig feierabend mit der Fehlermeldung:
C:
Zugriffsverletzung bei lesen an Position sowieso
. in der Zeile darüber sehe ich beim Debuggen, dass pNewViewClass->m_lpszClassName meiner selbstgeschriebenen Klasse entspricht. Ich vermute, dass es irgendwas mit den Ressourcen zu tun hat aber sicher bin ich mir auch nicht.

Hier gibts ein Beispielprojekt mit dem Problem:



Brauche Dringend Eure Hilfe.
Danke, Emu
 
Eieiei,... manchmal könnt man vom Glauben abkommen aber dann kommt doch wieder etwas Tunnel am Ende des Lichts ;)

Obige Vorgehensweise funktioniert. Beim Anlegen beider Projekte ist auf gleiche Zeichensatz-kodierung Unicode/Multibyte zu achten. Ich habs jetzt mit Unicode und es läuft.

Nun können die Plugins kommen.

CU
 
Zurück