DLL-Form wird geschlossen, nach dem Wegklicken einer MesssageBox
-
Hallo,
hier zunächst mal der Code:
//DLL: //--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- //DLL-Form //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "dlltestForm.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" Tfrmdlltest *frmdlltest; int iLength; extern "C" __declspec(dllexport) int ShowDLL(); //--------------------------------------------------------------------------- int ShowDLL() { //Tfrmdlltest *frmdlltest = new Tfrmdlltest(Application); frmdlltest = new Tfrmdlltest(NULL); frmdlltest->Visible = false; iLength = 0; frmdlltest->ShowModal(); delete frmdlltest; return iLength; } //--------------------------------------------------------------------------- __fastcall Tfrmdlltest::Tfrmdlltest(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall Tfrmdlltest::FormShow(TObject *Sender) { edText->Clear(); edText->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall Tfrmdlltest::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------- void __fastcall Tfrmdlltest::btnCancelClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall Tfrmdlltest::btnOKClick(TObject *Sender) { iLength = edText->Text.Length(); if(iLength == 0) { ShowMessage("Text bitte eingeben!"); edText->SetFocus(); } else { Close(); } } //---------------------------------------------------------------------------
Zum Problem:
Von einem Programm aus rufe ich die DLL dynamisch auf (siehe ShowDLL()).
Wenn das Textfeld im DLL-Form leer ist, dann wird die Message "Text bitte eingeben!" ordnungsgemäß ausgegeben (Bis hier ist alles in Ordnung)
So, klickt man diese Meldung weg, dann schließt sich das DLL-Form.Kann mir jemand erklären, woran das liegt?
Das DLL-Form ist doch modal (mit ShowModal()) angezeigt, und darf eigentlich ohne Aufrufen von Close() nicht geschlossen werden.Kann da bitte jemand helfen?
Danke
/Edit akari : cpp-Tags hinzugefügt. sfds
-
Hallo
Auch wenn es wahrscheinlich nicht direkt mit deinem Problem zusammenhängt : Du darfst das Form nicht zweimal löschen. Also entweder delete frmdlltest; oder Action = caFree;.
Sonst fällt mir kein Grund für dein Problem ein. Sicher das du alles nach der letzten Änderung kompiliert hast? Das deine Host-Anwendung die neueste kompilierte DLL benutzt?
bis bald
akari
-
akari schrieb:
Du darfst das Form nicht zweimal löschen. Also entweder delete frmdlltest; oder Action = caFree;.
akariAction = caFree; ohne delete frmdlltest; sorgt für eine Excception.
delete frmdlltest; muss sein.
Action = caFree; kann weg. Du hast recht.akari schrieb:
Sonst fällt mir kein Grund für dein Problem ein. Sicher das du alles nach der letzten Änderung kompiliert hast? Das deine Host-Anwendung die neueste kompilierte DLL benutzt?
Dafür ist wirklich gesorgt.
Danke für die schnelle Antwort.
-
Hallo,
ich habe die Ursache gefunden. Sie lag ganz wo anders.
Die Eigenschaft des Button "OK" war mrOK. Ich habe sie in mrNone geändert. Jetzt geht es.Gruß