Dialog in Lib packen



  • Hallo,

    ich hätte da mal ne Frage:

    ich möchte einen Dialog den man eventuell öfter in anderen Projekten verwenden kann in eine Lib packen (nicht dll).

    Ich hab dabei ein neues Win32 Projekt erstellt und den Dialog samt seiner Klassen dort rein gepackt.

    wenn ich diese LIB dann in einem Projekt einbinde lässt sich das ganze auch wunderbar erstellen/compilen.

    Wenn ich dann in meinem Dummy Projekt dann den Dialog öffnen will wird dieser dann nicht angezeigt.
    CTest test();
    test.DoModal();
    wird einfach durchlaufen 😕

    Was aber seltsam ist:
    Wenn ich die Dialog Resource auch im Dummy-Projekt einbinde(reinkopiere)
    dann geht es(is aber glaub net der richtige Weg)

    Kann mir vielleicht irgendwer helfen

    Vielen Dank schon mal im voraus
    GRuß Rffzn


  • Mod

    Du vergisst vermutlich

    AFX_MANAGE_STATE(AfxGetAppModuleState());
    

    aufzureifen. Ohne diesen Code wird aus der falschen Ressource Datei geladen.

    Schau Dir bitte einfach mal GetLastError an!



  • Also ich hab das ganze mal anders versucht

    ich hab eine MFC Erweiteerungs DLL erstellt die meinen Dialog beinhaltet.
    Wenn ich dann in den Projekteinstellungen um stelle von Dynamic Link Lib. auf Statische Lib, bekomme ich ne Compilerfehler.
    Diesen kann ich umgehen in dem ich das Makro "AFX_EXT_CLASS"
    auskommentiere.

    So jetzt kann ich die Lib einbinden jedoch wird der Dialog nicht angezeigt.(Jedoch über die Dll schon)

    Dieses AFX_MANAGE_STATE wo sollte ich dieses aufrufen damit meine Lib richtig funktioniert.

    Oder gibt es vielleicht auch eine andere Möglichkeit.

    Vielen Dank schon mal für die Hilfe
    Gruß _Raffzen



  • achso

    GetLastError() gibt 0x714 zurück.


  • Mod

    Du kannst selbst Error Lookup verwenden und prüfen was das heißt. Du findest das unter Tools:

    Die angegebene Image-Datei enthält keinen Ressourcenabschnitt.

    Nun Du musst AFX_MANAGE_STATE am Kopf jeder Funktion aufrufen, die von außerhalb Deines Programmes aufgerufen werden kann!
    Bitte lies doch die Doku dazu!

    BTW: Extension DLLs machen nur Sinn, wenn das darunter lkiegende Programm auch die MFC verwendet. Sonst solltest Du eine Standard DLL verwenden.



  • Martin Richter schrieb:

    BTW: Extension DLLs machen nur Sinn, wenn das darunter liegende Programm auch die MFC verwendet. Sonst solltest Du eine Standard DLL verwenden.

    Extension DLL's machen desweiteren Sinn, wenn die DLL selbst Objekte dynamisch erzeugen soll, die später in der aufrufenden Applikation weiterverarbeitet, modifiziert, oder auch gelöscht werden soll. Das funktioniert z.B. bei extension DLL's die über AfxLoadLibrary(..) geladen werden, ein Datenobjekt, das wieder in einer extension implementiert ist, füllen (dynamisch), und anschliessend wieder mit AfxFreeLibrary() entladen werden. So etwas funktioniert mit Regular DLL's nicht, da diese z.B. für einen operator new einen eigenen Heap verwenden, eine extension DLL dagegen den der aufrufenden Applikation.

    Natürlich setzt das voraus, dass das darunter liegende Programm auch die shared MFC verwendet.

    Gruss, Gio


Anmelden zum Antworten