ActiveX/COM DLL があります。多くのメソッドとプロパティが含まれています。次のスニペットのように、特定のシンボルがあるかどうかを尋ねられるようにしたいと思います。
If HasMethod( "StdLib.DLL", "ReadFileE" ) Then
...
End If
たとえば、VBScript や JScript からこれを行う方法はありますか? そうでない場合、必要な情報はどこで入手できますか?
グーグルで探し回っても欲しいものが見つからなかったので、TLBINF32.DLL について考えさせられたEdanmoのサイトを思い出し、Microsoft のTLBINF32.CHMをダウンロードし、GetMembersWithSubStringEx を調べました。以下は、その実装 (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 のデモ。上記のコードは、Registry コクラスの 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 へのパスを渡すことができたのではないかと思います。
Microsoft のインタラクティブな OLE/COM-Object ビューアーを使用して、ActiveX-DLL 内のメソッドとそのパラメーターを見つけました。ビューアーのソース コードを見ると、正しい方向に進むことができるかもしれません: MSDN OleView サンプル