문제

ActiveX/COM DLL이 있습니다.여기에는 많은 메서드와 속성이 포함되어 있습니다.다음 스니펫에 따라 특정 기호가 있는지 물어보고 싶습니다.

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

VBScript나 JScript 등에서 이 작업을 수행할 수 있는 방법이 있나요?그렇지 않은 경우 필요한 정보를 얻으려면 어디로 가야 합니까?

도움이 되었습니까?

해결책

내가 원하는 것을 찾지 못한 채 인터넷 검색을 한 후에 나는 에단 모 Tlbinf32.dll에 대해 생각하게 한 사이트, Microsoft의 다운로드 tlbinf32.chm 그리고 GetMembers와 함께 독서를 읽습니다. 다음은 IT의 구현 (tlbinf32.dll을 참조하여 VB6에서 수행), 일부 데모 VBScript 및 출력 및 일부 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 데모. 위의 코드는 레지스트리 Coclass의 stdlib dll에 포함되었습니다.

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

데모의 출력 (스크립트는 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

마지막으로 VBA 코드. 셀은 그 안에 기호가 있으며이 루틴은 그것을 찾거나 오류 문자열을 반환합니다.

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

지금 되돌아 보면 첫 번째 매개 변수로 DLL/OCX로가는 경로를 전달할 수 있다고 생각합니다.

다른 팁

Microsofts 대화식 OLE/COM-OBJECT VIEWER를 사용하여 ActiveX-DLL에서 Mehods와 그 매개 변수를 찾았습니다. 아마도 시청자의 소스 코드를 보면 올바른 방향으로 이끌 것입니다. MSDN Oleview 샘플

프로그래밍 방식으로 수행하려는 경우 - 나는 단순한 그렇게 하는 방법.어쨌든, 정말로 필요한 경우(그리고 프로그래밍 언어가 충분히 가능하다면) 유형 라이브러리를 쿼리할 수 있습니다(어딘가의 ITypeLib 설명을 참조하세요). http://msdn.microsoft.com/en-us/library/ms221549.aspx).

또한 IDispatch 포인터가 이미 있는 경우 해당 서비스를 사용하여 인터페이스에서 지원하는 메서드를 동적으로 열거하는 것을 고려할 수 있습니다(MSDN의 IDispatch 설명 참조).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top