Question

J'ai une DLL ActiveX / COM. Il contient de nombreuses méthodes et propriétés. Je voudrais être en mesure de lui demander si elle a un symbole particulier, selon l'extrait suivant:

If HasMethod( "StdLib.DLL", "ReadFileE" ) Then
    ...
End If

Est-il possible de le faire, disons, VBScript ou JScript? Sinon, où dois-je aller pour obtenir l'information nécessaire?

Était-ce utile?

La solution

Après googler autour de pas tout à fait de trouver ce que je voulais, je me suis souvenu Edanmo de site qui me fait penser à TLBINF32.DLL, le téléchargement de Microsoft TLBINF32.CHM et la lecture sur GetMembersWithSubStringEx. Ci-dessous la mise en œuvre de celui-ci (en fait VB6 avec une référence à TLBINF32.DLL), certains VBScript de démonstration et de sortie, et l'emballage de cette fonctionnalité dans certains VBA.

Public Function SearchTLIMethodsAndProperties(sTypelib As Variant, sSymbol As Variant) As Variant
    Dim SI As SearchItem
    Dim aResults As Variant
    Dim bFound as boolean
    Dim Groups(1) As InvokeKinds
    Groups(0) = INVOKE_FUNC Or INVOKE_PROPERTYGET Or _
        INVOKE_PROPERTYPUT Or INVOKE_PROPERTYPUTREF

    ReDim aResults(0)
    bFound = False
    With TypeLibInfoFromFile(sTypelib)
    .SearchDefault = tliStClasses Or tliStEvents
    For Each SI In .GetMembersWithSubStringEx(sSymbol, Groups)
        bFound = True
        arr.AAdd_PostIncrement aResults, SI.Name
    Next
    End With
    if bFound then 
    ReDim Preserve aResults(UBound(aResults) - 1)
    end if
    SearchTLIMethodsAndProperties = aResults
End Function

VBScript démo. Le code ci-dessus était inclus dans stdlib DLL dans le coclasse du Registre.

Dim O, R
Set O = CreateObject("Std.Registry")
Set R = CreateObject("Std.Arrays")
WScript.Echo R.ShowStructure( O.SearchTLIMethodsAndProperties( "MSSCRIPT.OCX",""))

La sortie de la démo (script a été exécuté dans SciTE).

>cscript "C:\foo\foo.vbs"
{Add,AddCode,AddObject,AllowUI,Clear,CodeObject,Column,Count,Description,Error,Eval,ExecuteStatement,HasReturnValue,HelpContext,HelpFile,Item,Language,Line,Modules,Name,NumArgs,Number,Procedures,Reset,Run,SitehWnd,Source,State,Text,Timeout,UseSafeSubset}
>Exit code: 0

Enfin, le code VBA. Une cellule a un symbole et cette routine trouve ou retourne une chaîne d'erreur.

Public Function LookupSymbol(sSym As String) As String
    Dim aRes As Variant
    aRes = reg.SearchTLIMethodsAndProperties("MSSCRIPT.OCX", sSym)
    Dim i As Integer
    LookupSymbol = "!!NotFound!!"
    For i = 0 To UBound(aRes)
    If LCase$(aRes(i)) = LCase$(sSym) Then
        LookupSymbol = sSym
        Exit For
    End If
    Next
End Function

Quand j'y repense maintenant, je pense que je pourrais passer le chemin de la DLL / OCX comme premier paramètre.

Autres conseils

Je l'ai utilisé Microsofts OLE visualiseur interactif / COM-Object pour trouver mehods et leurs paramètres dans ActiveX DLL. Peut-être à la recherche du code source du spectateur vous mènera dans la bonne direction: exemple MSDN OleView

Si vous voulez faire programmatiquement - Je ne suis pas au courant d'une façon de le faire simples . Quoi qu'il en soit, si vous avez vraiment besoin (et si votre langage de programmation est assez capable) - vous pouvez interroger la bibliothèque de type (voir la description ITypeLib quelque part à http://msdn.microsoft.com/en-us/library/ms221549.aspx ).

En outre, si vous avez déjà un pointeur IDispatch -. Vous pouvez envisager d'utiliser ses services d'énumérer dynamiquement méthodes prises en charge par l'interface (reportez-vous à la description IDispatch dans MSDN)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top