AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TMenuItem soll eine DLL-Prozedur aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

TMenuItem soll eine DLL-Prozedur aufrufen

Offene Frage von "xZise"
Ein Thema von xZise · begonnen am 1. Jan 2007 · letzter Beitrag vom 1. Jan 2007
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 15:07
Ich habe folgendes Problem:
Ich habe in einer DLL die Funktion "MenuItemClick(data : TItemData)"
Und diese Funktion so aufgerufen werden, wenn auf ein MenuItem geklickt wurde.

Zuerst habe ich gedacht, ich mach es direkt, aber dann meckert er rum, dass die Funktion kein Methodenzeiger ist.

Dann habe ich hier gesucht, und nur ergbnisse gefunden, wo man nicht selber Parameter übergeben kann.

Dann dachte ich:

Wie kann ich es also realisieren, dass die Methode einer speziellen DLL im Nachhinein aufgerufen wird.

Ich würde gerne sowas ungefähr haben:

Die Methodenzuweisung:
Delphi-Quellcode:
item.OnClick := PluginMenuItemClick
item.tag := "irgendeine Nummer"
Der Aufruf
DllVonNummer((item as TMenuItem).tag).MenuItemClick
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 15:26
Direkt geht nicht. Du mußt mindestens ein "Übersetzer"-Objekt dazwischenschalten.

Und ich hoffe TItemData ist ein Record. Du weißt ja: Objektaustasch zwischen Exe und DLL ohne Laufzeitpackages ist nicht so ohne weiteres.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 16:32
1. Es ist ein Record.
2. Was verstehst du unter "Übersetzer"?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 16:37
Eine Klasse welche die Funktionen der DLL als Objektmethoden bereitstellt

Delphi-Quellcode:
type
  TMyClass = class(TObject)
  private
    procedure MenuItemClick(data : TItemData);
  public
    procedure DoMenuItemClick(Sender: TObject);
  end;
MenuItemClick ruft "nur" die Funktion der DLL auf, DoMenuItemClick wird in den Entsprechenden Menueintrag als Eventhandler eingehängt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

Re: TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 17:14
Und DoMenuItemClick ruft MenuItemClick auf?

Dann habe ich das Problem, dass es mehere Einträge geben kann.

Und ich weiß nicht, welche "MenuItemClick" ich aufrufen muss. Die von Dll-X oder DLL-Y...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 18:32
Zitat von xZise:
Und DoMenuItemClick ruft MenuItemClick auf?
So in der Art.


Zitat von xZise:
Dann habe ich das Problem, dass es mehere Einträge geben kann.
Und ich weiß nicht, welche "MenuItemClick" ich aufrufen muss. Die von Dll-X oder DLL-Y...
Du kannst Doch deinen Code entsprechende erweitern.

DllVonNummer((item as TMenuItem).tag).MenuItemClick oder zusätzlich noch eine Verwalter drüber legen der für jede DLL eine Instanz dieses Objektes erzeugt-
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

Re: TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 18:49
Zitat von Bernhard Geyer:
Zitat von xZise:
Und DoMenuItemClick ruft MenuItemClick auf?
So in der Art.
o.O Wie soll ich das dann realisieren?

Zitat von Bernhard Geyer:
Du kannst Doch deinen Code entsprechende erweitern.

DllVonNummer((item as TMenuItem).tag).MenuItemClick
Aber wie komme ich an die "DllVonNummer()"?
Müsste ich nocheinmal die Dll laden?

Zitat von Bernhard Geyer:
oder zusätzlich noch eine Verwalter drüber legen der für jede DLL eine Instanz dieses Objektes erzeugt-
Also sozusagen ein "array of TMyClass"? Und für jede Dll dann ein Objekt erstellen? Dass könnte funktionieren.

Aber jetzt bräuchte ich irgendwie Quelltext, weil ich bisher irgendwie weiterkomme.

Also ich mache es ungefähr so:
Delphi-Quellcode:
type
  TLink = class(TObject)
  private
    procedure MenuItemClick(data : TItemData);
  public
    procedure OnMenuItemClick(Sender: TObject) of object;
  end;

[...]

procedure OnMenuItemClick(Sender : TObject);
begin
  { Mein Verständnisproblem: }
  "MenuItemClick der DLL aufrufen und 'data' übergeben"
end;

Delphi-Quellcode:
var
  Linker : array of TLink
begin
  [...] // DLL laden
  item.OnClick := Linker[High(Linker)].OnMenuItemClick;
end;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 18:57
Du lädst ja deine DLL's dynamisch.

- Jedes TLink-Instanz hat noch eine Handle auf die DLL welcher bei LoadLibrary herauskommt. Am besten erledigt jede Instanz die DLL-Ladeaktionen selbst.
- Für jede Funktion in der DLL definierst du eine Typ welche als Membervariable in der TLink-Klasse vorhanden ist (Beispiele für Typdefinitionen gibt es genügend im Forum)
- Zusatzdaten wie deine TItemData mußt du selbst in den Instanzen hinterlegen (Kenn jetzt dein komplettes Programm nicht um zu wissen wie das am geschicktesten machst.

Zitat von xZise:
Zitat von Bernhard Geyer:
Zitat von xZise:
Und DoMenuItemClick ruft MenuItemClick auf?
So in der Art.
o.O Wie soll ich das dann realisieren?
Was verstehst du daran nicht?

Delphi-Quellcode:
procedure TLinkDoMenuItemClick (...)
begin
  Vorbereitungs-Bla;
  MenuItemClick(...);
  Nachbereitungs-Bla;
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: TMenuItem soll eine DLL-Prozedur aufrufen

  Alt 1. Jan 2007, 19:42
Zitat von Bernhard Geyer:
Du lädst ja deine DLL's dynamisch.
Jap.

Zitat von Bernhard Geyer:
- Jedes TLink-Instanz hat noch eine Handle auf die DLL welcher bei LoadLibrary herauskommt. Am besten erledigt jede Instanz die DLL-Ladeaktionen selbst.
Also z.B. im Konstructor "LodLibraray" und im Destructur "FreeLibrary" oder?
Zitat von Bernhard Geyer:
- Für jede Funktion in der DLL definierst du eine Typ welche als Membervariable in der TLink-Klasse vorhanden ist (Beispiele für Typdefinitionen gibt es genügend im Forum)
Du meinst die Funktionen, die von den Komponenten ausgelöst werden?
Zitat von Bernhard Geyer:
- Zusatzdaten wie deine TItemData mußt du selbst in den Instanzen hinterlegen (Kenn jetzt dein komplettes Programm nicht um zu wissen wie das am geschicktesten machst.
Da wird sich ein weg finden lassen

Zitat von Bernhard Geyer:
Zitat von xZise:
Zitat von Bernhard Geyer:
Zitat von xZise:
Und DoMenuItemClick ruft MenuItemClick auf?
So in der Art.
o.O Wie soll ich das dann realisieren?
Was verstehst du daran nicht?
Das "So in der Art."

Also soweit ersichtlich. Nur die Klasse ist nicht im DLL-Code (oder?).
Und das mit dem Laden und Handle ist alles logisch, nur habe ich das Problem (ich konnte noch nicht coden), dass er ja das "MenuItemClick" eines speziellen Handles ausführen soll.

Vielleicht denk ich auch einfach nur zu kompliziert
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:17 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