Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL Aufruf aus EXE (https://www.delphipraxis.net/142933-dll-aufruf-aus-exe.html)

MarcoWarm 6. Nov 2009 10:06

Re: DLL Aufruf aus EXE
 
Zitat:

Zitat von Elvis
Du benutzt "String", welcher IMO ziemlicher Blödsinn ist, wenn man DLLs benutzt. Denn Strings sind Delphi-features und dann auch noch verwaltet vom MemoryManager.
Was schnell zu Fiesimatenten führt.
Entweder du nimmst PWideChar, oder WideString, oder du bleibst beim alten ANSI-Krams und nimmst PChar.

Räusper... Also Widestrings sind IMO genauso "Delphi-Features" und werden vom MemoryManager verwaltet.
Für die Kommunikation zwischen DLL und Application sollten immer nur Pointer auf Strings (egal ob PWideChar oder PAnsiChar) genutzt werden. Wenn es garnicht anders geht auch ShortStrings (z.B. String[60]).

Gruß
Marco

MarcoWarm 6. Nov 2009 10:08

Re: DLL Aufruf aus EXE
 
Zitat:

Zitat von Ruewue
@MarcoWarm: Die Form ist ja noch aktive. Die EXE wurde für Testzwecke geschlossen um die Reaktion zu testen. Dabei trat das Problem auf. Es soll den Fall wiederspiegeln, wenn der User während der Arbeit einfach ein Programm beendet ohne die Form geschlossen zu haben.

das ist ein absolutes NONO... du musst!!! sicherstellen, daß die Anwendung über die Lebenszeit der DLL hinaus "am leben" bleibt. Im Zweifelsfall gibst du der DLL ein Close event, damit du die DLL vor der Application schließen kannst.

Gruß
Marco

himitsu 6. Nov 2009 10:19

Re: DLL Aufruf aus EXE
 
bei Statischer Linkung wird die DLL nach der EXE beendet.

Delphi-Quellcode:
ShowFormAdministration(sUser, sEnvironment : String)
hier hattest du im Speichermanager der EXE variablen erstellt und übergeben
die Exe und ihr Speichermanager wird beendet
und danach versicht die Dll in ihrem Speichermanager Variablen freizugeben, welche es da nicht gibt.

> Stichwort: SharedMemoryManager


Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//  FreeAndNil(Sender);
end;
du willst der Form, wärend ihrer Abarbeitung, sich selber unter sich wegziehen lassen? :shock:


Der WideString ist eine Delphi-Umleitung zum OLE-String und der wird von der OleAut32.dll verwaltet und nicht vom DelphiMM (siehe MSDN-Library durchsuchenSysAllocStringLen)

Ruewue 6. Nov 2009 10:33

Re: DLL Aufruf aus EXE
 
D A N K E !!!

Hat mir sehr weiter geholfen.

MarcoWarm 6. Nov 2009 10:52

Re: DLL Aufruf aus EXE
 
Zitat:

Zitat von himitsu
Der WideString ist eine Delphi-Umleitung zum OLE-String und der wird von der OleAut32.dll verwaltet und nicht vom DelphiMM (siehe MSDN-Library durchsuchenSysAllocStringLen)

Danke für die Info


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Seite 2 von 2     12   

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