Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dynamisch DLL laden in Delphi 7 & Delphi 2010 (https://www.delphipraxis.net/139976-dynamisch-dll-laden-delphi-7-delphi-2010-a.html)

AThurm 9. Sep 2009 13:41


Dynamisch DLL laden in Delphi 7 & Delphi 2010
 
Hallo,

ich lade in Delphi 7 und Delphi 2010 eine DLL dynamisch über:

Delphi-Quellcode:
var
  hDLL: THandle;
  pCode: Pointer;
type
  TProcMainEntry = function: TForm;

begin
  hDll := 0;
  if FileExists(Pfad + vpeDllName) then
    hDLL := LoadLibrary(PChar(Pfad + vpeDllName))
  else
    SetLastError(2);

  if hDLL = 0 then
    RaiseLastOSError;
  pCode := GetProcAddress(hDLL, PChar(vpeFunction));
  if pCode = nil then
    RaiseLastOSError;
  Result := TProcMainEntry(pcode)();
wenn ich nun die DLL in Delphi 7 debugge, enthält die DLL eine Variabel aus dem Hauptprogramme welche gefüllt ist.
In Delphi 2010 ist diese Variabel nil.

Mir fällt auf das Delphi 7 den Stack-Trace vom Hauptprogramm mitführt, Delphi 2010 nur den Stack-Trace vom der DLL selber.

Muss ich beim laden der DLL in Delphi 2010 etwas mehr beachten?

mit freundlichen grüßen,
Andreas

Bernhard Geyer 9. Sep 2009 14:25

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010
 
Zitat:

Zitat von AThurm
Delphi-Quellcode:
type
  TProcMainEntry = function: TForm;

...

  pCode := GetProcAddress(hDLL, PChar(vpeFunction));
  Result := TProcMainEntry(pcode)();

Solange DLL und Exe nicht mit der gleichen Delphi-Version kompiliert sind wird es krachen an allen Ecken und Enden.

AThurm 9. Sep 2009 14:31

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010
 
sorry, dann hab ich mich falsch ausgedrückt, das ist der Fall.
Ich habe eine Virtuelle Maschine mit Delphi 2010 und dem selben Programm
und meinen Rechner mit Delphi 7 und dem selben Programm.

Nur das Verhalten ist in Delphi 7 anscheinend anders als in Delphi 2010 ?

Chris.R 9. Sep 2009 15:25

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010
 
Hallo,

soviel ich weiß werden Dll-Exporte immer als Ansi-String (PAnsiChar) angegeben. In Delphi 2010 ist PChar aber PWideChar und nicht PAnsiChar. Schau dir mal die Deklaration von GetProccAddress in Delphi 2010 an.
Eigentlich sollte der Compiler unter Delphi 2010 den Aufruf von GetProcAddress anmeckern, da PChar(PWideChar unter Delphi 2010) ungleich PAnsiChar ist.
Versuch einfach mal vpeFunction als AnsiString zu deklarieren und auf PAnsiChar zu casten.

Ciao Chris

AThurm 10. Sep 2009 06:58

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010
 
Zitat:

Zitat von Chris.R
Hallo,

soviel ich weiß werden Dll-Exporte immer als Ansi-String (PAnsiChar) angegeben. In Delphi 2010 ist PChar aber PWideChar und nicht PAnsiChar. Schau dir mal die Deklaration von GetProccAddress in Delphi 2010 an.
Eigentlich sollte der Compiler unter Delphi 2010 den Aufruf von GetProcAddress anmeckern, da PChar(PWideChar unter Delphi 2010) ungleich PAnsiChar ist.
Versuch einfach mal vpeFunction als AnsiString zu deklarieren und auf PAnsiChar zu casten.

Ciao Chris

das witzige ist ja, es schlägt keiner der Funktionen fehl.

hDLL ist <> 0 und pCode ist <> nil ...

nur werden in dem DLL Projekt die globalen Variabeln des Hauptprojektes nicht übernommen, in Delphi 7 anscheinend aber schon.
Aber ich probier das trotzdem mal aus...

Bernhard Geyer 10. Sep 2009 07:22

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010
 
Check mal in D2010 ob mit Runtimepackages kompiliert wurde (siehe auch Codegear-Forum "embarcadero.public.delphi.nativeapi").
AFAIK kann es passieren das diese Option beim umstellen von D7-> D2010 verloren geht.

AThurm 10. Sep 2009 07:28

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010
 
Zitat:

Zitat von Bernhard Geyer
Check mal in D2010 ob mit Runtimepackages kompiliert wurde (siehe auch Codegear-Forum "embarcadero.public.delphi.nativeapi").
AFAIK kann es passieren das diese Option beim umstellen von D7-> D2010 verloren geht.

Das war es , danke :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 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