Retrouver la classe implémentant une interface donnée dans une dll chargée dynam

Signaler
Messages postés
40
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
20 octobre 2015
-
Messages postés
40
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
20 octobre 2015
-
Bonjour, collègues pascaliens,

Voilà, je souhaiterais coder en Delphi une méthode qui inspecte une DLL chargée dynamiquement (par LoadLibrary ou une méthode similaire) afin de retrouver dans cette DLL une classe implémentant une interface (une interface au sens POO, une classe ne déclarant que des méthodes publiques abstraites, et non interface au sens Delphi qui l'équivalent du .h du C++) passée en paramètre via une variable de type Métaclasse.

J'ai très bien su le faire en VB.Net de cette manière plutôt simple :
'Dans les attributs
Protected dll as Assembly
'à l'init
dll= Assembly.Load(strCheminDll)
'Recherche proprement dite
Function ChercheInterface(iFace As Type) As Object
for each t as Type in dll.GetTypes
for each i as type in t.GetInterfaces
if i.Equals(iFace) then
Return Activator.CreateInstance(t)
end if
next
next
Return Nothing
End Function
Mais, pour refaire la même en Delphi je sèche un peu. Je n'arrive pas à voir s'il faut utiliser les métaclasses ou les paquets Rtti, à trouver le moyen de récupérer la classe souhaitée...
Au pire, je pensais coder dans ma dll une méthode exportée qui instancie la classe voulue et retourne l'objet, mais cela veut dire qu'il faut quand même inspecter les méthodes exportées par la DLL pour repérer celles qui retournent un objet d'un type qui implémente l'interface, mais là encore, je ne sais pas trop comment faire.

Quelqu'un pourrait-il m'aider ?

Merci !

1 réponse

Messages postés
40
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
20 octobre 2015

En cherchant un peu, j'ai pu trouver ce code qui se rapproche quelque peu du résultat que je recherche : http://www.swissdelphicenter.ch/torry/showcode.php?id=685
Mais il n'indique pas comment parcourir les fonctions exportées par la DLL pour retrouver celle correspondant au type de pointeur de fonction donné ainsi :
type
TDllfunc = function: TDllobjectClass;
stdcall;