AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dynamisch DLL laden in Delphi 7 & Delphi 2010

Dynamisch DLL laden in Delphi 7 & Delphi 2010

Ein Thema von AThurm · begonnen am 9. Sep 2009 · letzter Beitrag vom 10. Sep 2009
Antwort Antwort
Benutzerbild von AThurm
AThurm

Registriert seit: 27. Aug 2009
30 Beiträge
 
Delphi 2010 Enterprise
 
#1

Dynamisch DLL laden in Delphi 7 & Delphi 2010

  Alt 9. Sep 2009, 13:41
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010

  Alt 9. Sep 2009, 14:25
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von AThurm
AThurm

Registriert seit: 27. Aug 2009
30 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010

  Alt 9. Sep 2009, 14:31
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 ?
  Mit Zitat antworten Zitat
Chris.R

Registriert seit: 8. Sep 2009
Ort: Nürnberg
68 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010

  Alt 9. Sep 2009, 15:25
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
  Mit Zitat antworten Zitat
Benutzerbild von AThurm
AThurm

Registriert seit: 27. Aug 2009
30 Beiträge
 
Delphi 2010 Enterprise
 
#5

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010

  Alt 10. Sep 2009, 06:58
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...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010

  Alt 10. Sep 2009, 07:22
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von AThurm
AThurm

Registriert seit: 27. Aug 2009
30 Beiträge
 
Delphi 2010 Enterprise
 
#7

Re: Dynamisch DLL laden in Delphi 7 & Delphi 2010

  Alt 10. Sep 2009, 07:28
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:25 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