![]() |
Delphi-Version: 7
Dialog aus Delphi DLL verschachtelt aufrufen
Hallo,
Ich habe eine Funktion in einer delphi DLL in der ich einen Property-Dialog aufrufe:
Delphi-Quellcode:
Nun kann es vorkommen das der Dialog bei schon geöffnetem ersten Dialog ein zweites Mal aufgerufen wird.
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; 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 |
AW: Dialog aus Delphi DLL verschachtelt aufrufen
Zitat:
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 |
AW: Dialog aus Delphi DLL verschachtelt aufrufen
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, |
AW: Dialog aus Delphi DLL verschachtelt aufrufen
Hallo,
wie bereits gesagt solltest du eine lokale Variable EditForm2 deklarieren, so wie du es auch mit resultstr gemacht hast. Heiko |
AW: Dialog aus Delphi DLL verschachtelt aufrufen
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, |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz