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;.
    akari

    Action = 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ß


Anmelden zum Antworten