Hilfe bei Form mit DLL erstellen
-
Erstelle wie unten aufgeführt mit einer DLL eine Form die ich über mein Programm aufrufe. Jetzt ist es aber so das weil es ShowModal ist das Programm nicht benutzt werden kann sollange die Form der DLL offen ist. Und wenn ich die Form einfach mit Show starte wird sie nicht angezeigt (denke mal wegen dem delete direkt danach). Wie macht man das, das ich die Form mit Show starte oder zumindest den selben effect habe?
extern "C" __declspec(dllexport) void FormShow(TComponent* Owner) { TDLLForm* DLLForm = new TDLLForm(Owner); DLLForm->ShowModal(); delete DLLForm; } //---------------------------------------------------------------------------
-
Mach einfach ZWEI Funktionen in der DLL.
1. erzeugt Form und Show (nichtmodal!)
Das Handle in einer Variablen speichern!2. deleted die Form
Aufruf am Ende des Programmes nicht vergessen!
-
Hallo
das heißt, du könntest zum beispiel eine globale Variable TDLLForm * DLLForm anlegen, der du statt der internen in der Funktion FormShow die Instanz gibst.
Oder (was ich bevorzuge) du gibts die Instanz als Rückgabewert der Funktion zurück, ohne eine delete.
In beiden Fällen mußt du aber sichergehen, das du irgendwann die Instanz schließt und löscht. Am besten mit einer weiteren Funktion namens FormClose(void) bzw *FormClose(TDLLForm DLLForm), in dem entweder die Instanz als globale Variable oder als Parameter gelöscht wird.bis bald
akari
-
Irgendwie bekomme ich das nicht hin. So lange ich es statisch mache geht alles so wie ich möchte. Aber wenn es ich es dynamisch mache gibt es eine Fehlermeldung.
So wie hier auch schon
http://www.c-plusplus.net/forum/viewtopic.php?t=68580&highlight=form+in+dll
-
Wenn ich es so mache kann ich die DLL nicht mal mehr starten weil es dann fehler im Speicher gibt.
//--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #include "formunit.h" #pragma hdrstop TDLLForm* DLLForm = new TDLLForm(NULL); //--------------------------------------------------------------------------- #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- extern "C" __declspec(dllexport) void ModulShow(TComponent* Owner) { DLLForm->Show(); } //--------------------------------------------------------------------------- __declspec(dllexport) void ModulClose(TComponent* Owner) { delete DLLForm; } //---------------------------------------------------------------------------
-
Hallo
probier mal statt
TDLLForm* DLLForm = new TDLLForm(NULL);diese Variante
TDLLForm* DLLForm = NULL; ... extern "C" __declspec(dllexport) void ModulCreate(TComponent* Owner) { DLLForm = new TDLLForm(NULL); } //---------------------------------------------------------------------------Durch das aufrufen der Funktion wird die Instanz erschaffen.
Duech ModulClose() (nenn es lieber ModulDestroy) wird die Instanz gelöscht.bis bald
akari
-
Das hat keine änderung gebracht. Gibt immer noch diesen fehler.
Wenn du mal zeit und lust findest könnte ich das auch mal packen und zum Download stellen oder es dir schicken. Das wären dann nur 40KB.