Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mit DLL Menü-Einträge auf fremder Form erstellen (https://www.delphipraxis.net/108176-mit-dll-menue-eintraege-auf-fremder-form-erstellen.html)

Nju 8. Feb 2008 10:07


Mit DLL Menü-Einträge auf fremder Form erstellen
 
Hallo,
ich spiele gerade mit selbsterstellten DLLs rum und experimentiere mit deren Möglichkeiten. Dabei hänge ich an folgendem Problem fest.

Ich habe eine Base-DLL-Datei mit folgender Funktion:

Delphi-Quellcode:
function menuentries_add(Target: TComponent): byte; stdcall;
var
  Menue: TMainMenu;
  Item_Hilfe: TMenuItem;
begin
  Menue := TMainMenu.Create(Target);
    Item_Hilfe := TMenuItem.Create(Menue);
    Item_Hilfe.Caption := 'Test';
    Menue.Items.Add(Item_Hilfe);
end;
Problem ist, wenn ich aus einer Form (sprich: fremdes Projekt, welches auf die DLL zugreift) diese Funktion aufrufen möchte, passiert erstmal nichts. Beim Schließen der Anwendung hagelt es dann Access Violations und ein Runtime Error.

Aufrufen tu ich die Funktion so:

Delphi-Quellcode:
  Fmenuentries_add(frm_Main);
Wenn ich den Funktionsaufruf mit den 4 Zeilen aus der Funktion ersetze (genauso wie das "Target" mit "frm_Main"), dann funktioniert es ohne Probleme. Schätze mal, dass es irgendwie an der Variable "Target" liegt, aber eine Lösung will mir partout nicht einfallen.

sirius 8. Feb 2008 10:10

Re: Mit DLL Menü-Einträge auf fremder Form erstellen
 
Hast du die Unit Sharemem in beiden Projekten eingebunden? (Ansonsten funktioniert dein Konzept nicht)

DeddyH 8. Feb 2008 10:19

Re: Mit DLL Menü-Einträge auf fremder Form erstellen
 
AFAIK kannst Du in DLLs keine Objekte als Parameter zur bzw. von der Hauptanwendung übergeben. Du müsstest also eine BPL erstellen. Da ich das selbst aber noch nie gemacht habe, kann ich nur auf die Hilfe verweisen.

Nju 8. Feb 2008 10:23

Re: Mit DLL Menü-Einträge auf fremder Form erstellen
 
Alles klar, denn das Hinzufügen von "Sharemem" produzierte weitere Fehlermeldung (Ungültige Zeigeroperation). Dann werde ich mich mal mit BPL beschäftigen. Vielen Dank. :)

sirius 8. Feb 2008 10:27

Re: Mit DLL Menü-Einträge auf fremder Form erstellen
 
Zitat:

Zitat von Nju
Alles klar, denn das Hinzufügen von "Sharemem" produzierte weitere Fehlermeldung

Dürfte eigentlich nicht :gruebel: wenn du Sharemem wie es beschrieben ist in beiden Projekten (dpr-Datei) als erste Unit angibst.

Dennoch ist es eben nicht sinnvoll eine DLL mit Delphi-spezifischen Schnittstellen zu erstellen. Da ist eine BPL die bessere Wahl.

Bernhard Geyer 8. Feb 2008 11:59

Re: Mit DLL Menü-Einträge auf fremder Form erstellen
 
Verwendung von "lebenden" Objekten über DLL-Grenzen hinweg wird nur "geschmeidig" funktionieren wenn gemeinsame Runtimepackages verwendet werden. Ansonsten ist DLL.TObject <> Exe.TObject und jeder is/as-Cast schlägt fehl.

Nju 8. Feb 2008 13:03

Re: Mit DLL Menü-Einträge auf fremder Form erstellen
 
Zitat:

Zitat von Bernhard Geyer
Verwendung von "lebenden" Objekten über DLL-Grenzen hinweg wird nur "geschmeidig" funktionieren wenn gemeinsame Runtimepackages verwendet werden.

Wie genau ist das gemeint und worauf muss ich da genau achten?


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