Thema: Delphi FMX und VCL verbinden

Einzelnen Beitrag anzeigen

Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: FMX und VCL verbinden

  Alt 18. Sep 2019, 17:02
Wenn ich da nichts übersehe, machst du da einen Pointer auf nil. TestFunc ist mit nil initialisiert und so führt @nil zu einer Access Violation. Also einfach das @ entfernen und es sollte gehen.

TestFunc := GetProcAddress(DllHandle, 'TestFunc');

Warum importierst du die Funktion nicht einfach wie folgt. So brauchst du das ganze Load/FreeLibrary Zeugs nicht. Deine DLL muss ja eh immer vorhanden sein. Also macht es keinen Sinn, diese zur Runtime als Latebinding zu laden. Mit dieser Art der DLL Einbindung, wird die DLL automatisch beim Programmstart geladen. Ist also deutlich einfacher.
Delphi-Quellcode:
{...Unit, Interface, Uses, TForm1...}

function TestFunc(): Boolean;

var
  Form1: TForm1;
  DllHandle: THandle;

implementation

{$R *.dfm}
{...Funktionen...}


procedure TForm1.Button2Click(Sender: TObject);
begin
  TestFunc;
end;

{...Funktionen...}
function TestFunc; external 'ProjectDLL.dllname 'TestFunc';

{ Das brauchst du in diesem Fall nicht, da die DLL durch die obige Deklaration automatisch beim Programmstart geladen wird.
initialization
  if DllHandle = 0 then begin
    DllHandle := LoadLibrary('ProjectDLL.dll');
    if DllHandle <= 0 then begin
      MessageDlg('ProjectDLL.dll steht nicht zur Verfügung',
        mtInformation, [mbOK], 0);
    end;
end;

finalization
if DLLHandle <> 0 then
  FreeLibrary(DLLHandle);
}


end.
Lies dir mal in der Hilfe die Beschreibung zu "external": http://docwiki.embarcadero.com/RADSt...tions_(Delphi)

Geändert von Rolf Frei (18. Sep 2019 um 17:30 Uhr)
  Mit Zitat antworten Zitat