![]() |
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:
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.
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; Aufrufen tu ich die Funktion so:
Delphi-Quellcode:
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.
Fmenuentries_add(frm_Main);
|
Re: Mit DLL Menü-Einträge auf fremder Form erstellen
Hast du die Unit Sharemem in beiden Projekten eingebunden? (Ansonsten funktioniert dein Konzept nicht)
|
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.
|
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. :)
|
Re: Mit DLL Menü-Einträge auf fremder Form erstellen
Zitat:
Dennoch ist es eben nicht sinnvoll eine DLL mit Delphi-spezifischen Schnittstellen zu erstellen. Da ist eine BPL die bessere Wahl. |
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.
|
Re: Mit DLL Menü-Einträge auf fremder Form erstellen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 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