AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Interface-Struktur - Loader für DLLs
Thema durchsuchen
Ansicht
Themen-Optionen

Interface-Struktur - Loader für DLLs

Ein Thema von slemke76 · begonnen am 18. Aug 2011 · letzter Beitrag vom 20. Jun 2013
 
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#1

Interface-Struktur - Loader für DLLs

  Alt 18. Aug 2011, 13:33
Hallo zusammen,

nachdem mir hier im Forum Ende 2009 bzgl. der Implementation einer Plugin-Struktur für DLLs supergut geholfen wurde, möchte ich das Programm jetzt gerne erweitern.
Es geht darum, mit einer Routine verschiedene DLLs mit verschiedenen Interfaces einzulesen.

Im Moment sieht es so aus, dass es eine Interface-Deklaration gibt:
Delphi-Quellcode:
type
  IImport = interface(IInterface)
    ['{6E19FD1D-E50C-4701-8710-611F398DC4BE}']
    function checkModuleStatus():TModuleStatus;
    procedure DoImport();
    procedure SetParameter(name: PChar; value: PChar);
  end;
Die Instanz wird nach einem "Supports" geholt:

Delphi-Quellcode:
...
libs[j]:=LoadLibrary(@dllname[1]);
if libs[j] <> 0 then GetInterface:=GetProcAddress(libs[j], 'GetInterface');
if (not Supports(GetInterface, IImport)) then GetInterface:=nil;
if Assigned(GetInterface) then begin
   Adapter:=GetInterface();
....
Das Programm wird jetzt um eine weitere (komplett andere) Plugin-Struktur ergänzt.
Dafür habe ich wiederum ein Interface deklariert:

Delphi-Quellcode:
type
  IExport = interface(IInterface)
    ['{70D193B5-0C3A-4960-ACE9-9103959AA06E}']
    procedure tuwasanderes();
  end;
Dir Frage ist jetzt, wie bekomme ich meine DLL-Lade-Routine in eine Funktion ausgelagert ?
Das Problem ist, dass ich für den Vergleich mittels "Supports" die Interface-Deklaration benötige - entweder IImport oder IExport.

Was ich schon probiert habe, ist so etwas:
Delphi-Quellcode:
function DLLLoader(useInterface: IInterface)
...
if (not Supports(GetInterface, useInterface)) then GetInterface:=nil;
...
Geht aber nicht; "es gibt keine überladene Funktion von Supports...".

Wie löse ich das Problem ?

Danke,
Sebastian
  Mit Zitat antworten Zitat
 


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 19:19 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