AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Interface aus DLL mit dynamischer Bindung - wann FreeLibrary aufrufen?

Interface aus DLL mit dynamischer Bindung - wann FreeLibrary aufrufen?

Ein Thema von DeddyH · begonnen am 24. Aug 2015 · letzter Beitrag vom 25. Aug 2015
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.459 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Interface aus DLL mit dynamischer Bindung - wann FreeLibrary aufrufen?

  Alt 25. Aug 2015, 08:34
Das war die entscheidende Kleinigkeit, von der ich gesprochen hatte. Danke Dir herzlich
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.395 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Interface aus DLL mit dynamischer Bindung - wann FreeLibrary aufrufen?

  Alt 25. Aug 2015, 13:43
Für ein Plugin-DLL scheint es mir flexibel, wenn diese selbst die von ihr bereitgestellten Interfaces bei der Anwendung registriert.
Dazu wird dem Plugin ein Interface zum Anwendungskern übergeben, bei dem beliebige Interfaces registriert und abgefragt werden können.

Beispiel könnte ein Exportdateiformat sein. Davon kann es mehrere geben, für den Anwendungsfall ist es egal welche davon in der Anwendung oder in einem Plugin realisiert sind.
Der Dateiexport fragt alle registrierten Formate beim Anwendungskern ab, bietet diese dem Anwender an und erzeugt die Datei im gewählten Format.
Sollte dieses Dateiformat die Namen von Artikelgruppen benötigen, kann es dafür vom Anwendungskern ein Interface abfragen, das eine entsprechende Liste bereitstellt.
Das Dateiformat kann in der Plugin-Dll realisiert sein und die Schnittstelle mit den Artikelgruppen in der Anwendung.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Interface aus DLL mit dynamischer Bindung - wann FreeLibrary aufrufen?

  Alt 25. Aug 2015, 13:49
Also in ungefähr so
Delphi-Quellcode:
IPlugin = interface
  ['{GUID}']
end;

IPluginHost = interface
  ['{GUID}']
  procedure RegisterPlugin( const Aplugin : IPlugin );
end;
Jede Plugin-DLL bietet eine Methode zum Abrufen an:
Delphi-Quellcode:
procedure QueryPlugin( const Host : IPluginHost ); stdcall;
begin
  Host.RegisterPlugin( TFooPlugin.Create );
  Host.RegisterPlugin( TBarPlugin.Create );
  ...
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.459 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Interface aus DLL mit dynamischer Bindung - wann FreeLibrary aufrufen?

  Alt 25. Aug 2015, 16:20
Danke für die Denkarbeit, aber in diese Richtung geht es nicht (es gibt nur ein Interface, und jede DLL gibt exakt dieses zurück). Ich muss zugeben, dass der Begriff PlugIn in der Problemstellung etwas irreführend war.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: Interface aus DLL mit dynamischer Bindung - wann FreeLibrary aufrufen?

  Alt 25. Aug 2015, 16:46
Danke für die Denkarbeit, aber in diese Richtung geht es nicht (es gibt nur ein Interface, und jede DLL gibt exakt dieses zurück). Ich muss zugeben, dass der Begriff PlugIn in der Problemstellung etwas irreführend war.
Das macht doch nichts, wenn jede DLL nur ein Interface zurückgibt.

Die Dll liefert zunächst nur ein Interface vom Typ IPlugin zurück, welches aber auch das benötigte INeededInterface unterstützt:
Delphi-Quellcode:
TFoo = class( TInterfacedObject, IPlugin, INeededInterface )
end;
Die Anwendung selber nimmt sich dann alle Plugins, die das gewünschte Interface unterstützen.

Dadurch wird es wurscht, welche Interfaces eine DLL zur Verfügung stellt, man hat genau einen Einsprungspunkt und darüber kann ich jede Funktionalität aus der DLL herauslutschen. Auch die, die ich mir heute noch nicht vorstellen kann.

Und einen wirklichen Overhead habe ich dadurch auch nicht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf