AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dialog aus Delphi DLL verschachtelt aufrufen

Ein Thema von HPW · begonnen am 25. Nov 2013 · letzter Beitrag vom 25. Nov 2013
Antwort Antwort
HPW

Registriert seit: 28. Feb 2003
160 Beiträge
 
Delphi 7 Professional
 
#1

Dialog aus Delphi DLL verschachtelt aufrufen

  Alt 25. Nov 2013, 20:55
Delphi-Version: 7
Hallo,

Ich habe eine Funktion in einer delphi DLL in der ich einen Property-Dialog aufrufe:

Delphi-Quellcode:
FUNCTION nbEditAction( IDNum : INTEGER;
  VAR Params : ARRAY OF PChar ) : BOOLEAN;
VAR
      resultstr : String ;
BEGIN
  Result := FALSE;
  nbEditCount := nbEditCount+1;
  CASE IDNum OF
    1 : BEGIN
          { Anzeigen der Form... }
          EditForm2 := TEditForm2.CreateParented( GetActiveWindow );
          TRY
            EditForm2.Caption := CmdParaName[1]+' Properties';
            EditForm2.Edit1.Text := Params[0];
            ...
            ...
            IF EditForm2.ShowModal = mrOK THEN
              BEGIN
                SetStr( Params[0], EditForm2.Edit1.Text );
                ...
                ...
                Result := TRUE;
              END;
          FINALLY
            EditForm2.Free;
          END;
        END;
  END;
  nbEditCount := nbEditCount-1;
END;
Nun kann es vorkommen das der Dialog bei schon geöffnetem ersten Dialog ein zweites Mal aufgerufen wird.
Das funktioniert nun nicht, da EditForm2 vom zweiten Dialog überschrieben wird und ich dann beim Schliessen des ersten Dialog eine Access Violation bekomme. Mit nbEditCount erkenne ich zwar das ein Dialog erneut aufgerufen wird und könnte das mit einer Fehlermeldung verhindern. Aber wenn ich das zulassen möchte, wie bekomme ich das hin, das auch der erste Dialog noch funktioniert.

Grüsse,

Hans-Peter
Hans-Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dialog aus Delphi DLL verschachtelt aufrufen

  Alt 25. Nov 2013, 21:10
wie bekomme ich das hin, das auch der erste Dialog noch funktioniert.
Indem du keine globalen Variaben benutzt

Wenn die Variable "nur" innerhalb der Funktion genutzt wird, dann definiert sie auch da drin.



Und dann, rate ich davon ab, die VCL innerhalb einer DLL zu benutzen. (außer, wenn sie ausschließlich da genutzt wird)
Oder du mußt dafür sorgen, daß Speichermanager und RTTI über die EXE-DLL-Grenze geshared wird.
Offizieller Weg: Packages benutzen
$2B or not $2B
  Mit Zitat antworten Zitat
HPW

Registriert seit: 28. Feb 2003
160 Beiträge
 
Delphi 7 Professional
 
#3

AW: Dialog aus Delphi DLL verschachtelt aufrufen

  Alt 25. Nov 2013, 21:43
Danke für die Hinweise.
Da muss ich noch ein paar Details nachliefern.
Auf die rufende EXE habe ich keinen Einfluss, da es sich dabei um das neobook-System handelt.
Die nbEditAction ist die offizielle SDK Funktion, die aufgerufen wird um registrierte Plugin-Befehle zu konfigurieren. Daher kann ich die VCL benutzen, da sie nur für das spezielle Plugin genutzt wird.

Grüsse,
Hans-Peter
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Dialog aus Delphi DLL verschachtelt aufrufen

  Alt 25. Nov 2013, 22:13
Hallo,

wie bereits gesagt solltest du eine lokale Variable EditForm2 deklarieren,
so wie du es auch mit resultstr gemacht hast.


Heiko
Heiko
  Mit Zitat antworten Zitat
HPW

Registriert seit: 28. Feb 2003
160 Beiträge
 
Delphi 7 Professional
 
#5

AW: Dialog aus Delphi DLL verschachtelt aufrufen

  Alt 25. Nov 2013, 22:49
Nochmals Danke für die Tips.
Der nochmalige direkte Hinweiss auf die Variable EditForm2 hat meinem Verständnis auf die Sprünge geholfen.
Nachdem ich alle Dialoge zu lokalen Variablen gemacht habe, funktioniert alles ohne Probleme.
Hatte ich vor Jahren aus der SDK Vorlage übernommen und nicht weiter drüber nachgedacht.
Aber so ist das mit dem Wald und den vielen Bäumen ....

Grüsse,
Hans-Peter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz