![]() |
AW: FMX und VCL verbinden
Noch eine Frage zum Verständnis:
Die Art und Weise, wie das ganze funktioniert ist doch folgende: Die Main Unit beinhaltet die VCL Form und die Grundfunktionen, die FMX Unit beinhaltet die FMX Form und FireMonkey Funktionen. Die FMX Unit gibt die Prozeduren und Funktionen über den Befehl
Delphi-Quellcode:
an die DLL frei.
procedure TestProc; export;
In der DLL befinden sich die Informationen, auf welche Unit zugegriffen wird (für die Quellfunktionen) und welche Funktionen/Prozeduren exportiert werden. In der Main Unit werden dann die Funktionen mit Hilfe der DLL geladen und aufgerufen. Entweder per Initialisierung oder als Funktionsdeklaration.
Delphi-Quellcode:
initialization
if DllHandle = 0 then begin DllHandle := LoadLibrary('ProjectDLL.dll'); if DllHandle > 0 then begin //@TestFunc := GetProcAddress(DllHandle, 'TestFunc'); DllHandle := LoadLibrary('ProjectDLL.dll'); End else begin MessageDlg('ProjectDLL.dll steht nicht zur Verfügung', mtInformation, [mbOK], 0); end; end; finalization if DLLHandle <> 0 then FreeLibrary(DLLHandle);
Delphi-Quellcode:
An welcher Stelle kommt dann die "ProjectDLLInterface" Unit von Rolf zum Einsatz?
procedure TestProc; external 'ProjectDLL.dll' name 'TestProc';
Habe ich das so richtig verstanden oder hab ich was falsch wiedergegeben? |
AW: FMX und VCL verbinden
Kleines Update:
Ich teste ja fleißig und probiere verschiedene Methoden. Mir ist aufgefallen, dass bei den beiden Zugriffsmöglichkeiten auf die DLL bei verschiedenen Adressen die Zugriffsverletzung eintritt. Bei der ersten Variante über
Delphi-Quellcode:
kommt der Fehler:
initialization
if DllHandle = 0 then begin DllHandle := LoadLibrary('ProjectDLL.dll'); if DllHandle > 0 then begin TestProc := GetProcAddress(DllHandle, 'TestProc'); DllHandle := LoadLibrary('ProjectDLL.dll'); End else begin MessageDlg('ProjectDLL.dll steht nicht zur Verfügung', mtInformation, [mbOK], 0); end; end; finalization if DLLHandle <> 0 then FreeLibrary(DLLHandle) "Zugriffsverletzung bei Adresse 047E30E3 in Modul 'ProjectDLL.dll'. Lesen von Adresse 000000B0" Während bei der Methode:
Delphi-Quellcode:
die Meldung:
procedure TestProc; external 'ProjectDLL.dll' name 'TestProc';
"Zugriffsverletzung bei Adresse 02A630E3 in Modul 'ProjectDLL.dll'. Lesen von Adresse 000000B0" kommt. |
AW: FMX und VCL verbinden
Du solltest das Formular in der DLL vielleicht besser erst einmal erzeugen, bevor Du es anzeigst.
|
AW: FMX und VCL verbinden
Zitat:
Unit1FMX.pas (befindet sich im DLL Projekt)
Delphi-Quellcode:
Ich vermute aber, dass ich da einen Fehler gemacht habe. :pale:
procedure TestProc;
begin FMXForm1 := TFMXForm1.Create(Application); FMXForm1.ShowModal; end; |
AW: FMX und VCL verbinden
Versuch es mal so (die globale Variable kannst Du eigentlich löschen):
Delphi-Quellcode:
procedure TestProc;
var frm: TFMXForm1; begin frm := TFMXForm1.Create(nil); try frm.ShowModal; finally frm.Free; end; end; |
AW: FMX und VCL verbinden
Nope das hat leider auch nicht geholfen, sieht aber auf jeden Fall richtiger aus.
Ich habe die Vermutung, dass der Fehler weiter vorne liegen muss, also habe ich den Zugriff auf die DLL vielleicht nicht richtig umgesetzt. |
AW: FMX und VCL verbinden
Zitat:
|
AW: FMX und VCL verbinden
Da hab ich gepennt. Danke für den Hinweis! Der Schritt ist natürlich überflüssig.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 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