GetClassesByInterface - Retrieve all the classes that implement a given interface
' Return all classes of the type library specified in
' TypeLibFile parameter that support a certain interface.
' the interface can be specified as an Object or through its IID
' Be sure that "TypeLib Information" type library (TlbInf32.tlb)
' is referenced in your VB project.
Function GetClassesByInterface(ByVal TypeLibFile As String, _
ObjectOrInterfaceIID As Variant) As Collection
Dim TLI As New TLIApplication
Dim TypeLibrary As TypeLibInfo
Dim Class As CoClassInfo
Dim Interface As InterfaceInfo
Dim IID_objInterface As String
' prepare the result
Set GetClassesByInterface = New Collection
' raises an error if unable to open the type library
' (e.g. file not found or not a TLB)
Set TypeLibrary = TLI.TypeLibInfoFromFile(TypeLibFile)
' get the IID of requested interface
If VarType(ObjectOrInterfaceIID) = vbString Then
IID_objInterface = ObjectOrInterfaceIID
Else
IID_objInterface = TLI.InterfaceInfoFromObject(ObjectOrInterfaceIID) _
.Guid
End If
' fill the return collection with names of
' classes that implement the interface
For Each Class In TypeLibrary.CoClasses
For Each Interface In Class.Interfaces
' compare GUIDs
If StrComp(Interface.Guid, IID_objInterface, vbTextCompare) = 0 Then
' ok, this class implements the interface
GetClassesByInterface.Add Class.Name, Class.Name
Exit For
End If
Next
Next
End Function