Excel VBAでファイル解析(タイプ・ライブラリ編)
■タイプ・ライブラリの概要
タイプ・ライブラリは、COMオブジェクトのインターフェースに関する定義情報が格納されているライブラリで、Microsoftのサイト(COM、DCOM、タイプライブラリ)の項には以下のように記載されています。
- コンポーネントオブジェクトモデル (COM) と分散コンポーネントオブジェクトモデル (DCOM) は、リモートプロシージャコール (RPC) を使用して、分散コンポーネントオブジェクトが相互に通信できるようにします。
- (中略)
- タイプライブラリ (.tlb) は、COM または DCOM オブジェクトのプロパティおよびメソッドに関する情報を、実行時に他のアプリケーションからアクセスできる形式で格納するバイナリファイルです。
Visual Basic Editor(VBE)に搭載されているオブジェクト・ブラウザは、タイプ・ライブラリを参照してインターフェース情報を表示していますので、タイプ・ライブラリを参照して同様の情報を表示するExcelツールを作成するというのが本稿のテーマです。
タイプ・ライブラリの格納場所
あるオブジェクトのインターフェースを確認したい時、以下の手順でタイプ・ライブラリの格納場所を調べることができます。
①調べたいオブジェクトのGUIDを把握する
Excelで以下のような簡単なプログラムを作成すると、(出力例)のような結果が得られます(ここではFile System Objectが入っている、Scripting Runtimeを表示しています)。
- Dim sht, Ref As Object
- Dim lcnt As Long
- Private Sub Sample1()
- Set sht = ActiveSheet
- lcnt = 0
- For Each Ref In ActiveWorkbook.VBProject.References
- lcnt = lcnt + 1
- sht.Cells(lcnt, 1) = Ref.Name
- sht.Cells(lcnt, 2) = Ref.Description
- sht.Cells(lcnt, 3) = Ref.GUID
- Next Ref
- Set Ref = Nothing
- End Sub
(出力例)
Scripting | Microsoft Scripting Runtime | {420B2830-E718-11CF-893D-00A0C9054228} |
②レジストリ・エディタでGUIDに対応するタイプ・ライブラリの情報を取得する
Scripting Runtimeのタイプ・ライブラリを知りたい場合、レジストリ・エディタで[HKEY_CLASSES_ROOT]-[TypeLib]-[{420B2830-E718-11CF-893D-00A0C9054228}]の中を見ると、タイプライブラリが格納されているファイルが「C:\Windows\System32\scrrun.dll」であることがわかります。
この例では「dll」ファイルの中にタイプ・ライブラリが格納されていますが、拡張子は「tlb」「ocx」「exe」と色々です。
いずれにしろファイル形式としてはEXEファイルなので、ファイルの中を解析して行けば情報を取得できるはずですが、わからないことが多過ぎて断念しました。
色々と悩んだ末にVisual Basic 6.0に付属していたTLI(TypeLib Information library)を使用したExcelツールを作成したところ、オブジェクト・ブラウザと同等の情報を取得できましたので、次項で詳細を説明します。
■TLI(TypeLib Information library)の概要
TLI(TypeLib Information library)は、タイプ・ライブラリの情報を取得することに特化したクラス・ライブラリです。
次項でTLIのクラス一覧と主なクラスのメソッドおよびプロパティを説明します。
⇒詳細はMicrosoftのサイト(「COM」や.NET版の「TLI」等)を参照して下さい。
TLIのクラス一覧
TLIで提供されているクラスを一覧にすると下表の通りとなっており、種類がたくさんあるので若干わかり難いですが、主要なクラス(CoClass)はTLIApplicationクラス、TypeLibInfoクラス、SearchHelperクラスの3つだけで、後は全てサブクラスとなっています。
サブクラスの大半は情報の種類別に用意された「~Info」クラスで、TypeLibInfoクラス以外はコレクションとセットで用意されています。
(TLIのクラス一覧)
クラス | 説明 |
---|---|
CoClasses | Subset of TypeInfos collection |
CoClassInfo | Members are a subset of TypeInfo object members |
ConstantInfo | Members are a subset of TypeInfo object members |
Constants | Subset of TypeInfos collection |
CustomData | CustomData Object |
CustomDataCollection | CustomData Collection |
CustomFilter | Interface for modifying or splitting a SearchResults collection, use with Implements |
CustomSort | Interface for custom sorting of a SearchResults collection, use with Implements |
DeclarationInfo | Members are a subset of TypeInfo object members |
Declarations | Subset of TypeInfos collection |
InterfaceInfo | Members are a subset of TypeInfo object members |
Interfaces | Subset of TypeInfos collection |
IntrinsicAliases | Subset of TypeInfos collection |
IntrinsicAliasInfo | Members are a subset of TypeInfo object members |
ListBoxNotification | ListBoxNotification interface, use with Implements and Direct methods |
MemberInfo | MemberInfo object |
Members | Members Collection |
ParameterInfo | Parameter Information |
Parameters | Parameters Collection |
RecordInfo | Members are a subset of TypeInfo object members |
Records | Subset of TypeInfos collection |
SearchHelper | Helper object for GetMembersWithSubString and multiple TypeLibs |
SearchItem | Item in SearchResults collection |
SearchResults | SearchResults collection |
TLIApplication | TLIApplication object |
TypeInfo | TypeInfo Information |
TypeInfos | TypeInfos Collection |
TypeLibInfo | TypeLib information |
UnionInfo | Members are a subset of TypeInfo object members |
Unions | Subset of TypeInfos collection |
VarTypeInfo | VarType information for parameters and return types |
TypeInfoクラスにはType(型)に関する情報を保有しており、TypeInfoクラスのサブクラスにCoClassInfoクラス、ConstantInfoクラス、DeclarationInfoクラス、InterfaceInfoクラス、IntrinsicAliasInfoクラス、RecordInfoクラス、UnionInfoクラスがあります。
さらに各クラスのサブクラスとして、明細情報を保有するMemberInfoクラスがあり、メンバーがパラメータ(引数)を持っている場合には、MemberInfoクラスのサブクラスとして、ParameterInfoクラスが存在します。
主なクラスの階層構造を示すと、下図のようになります。
TLIApplicationクラス | |||||||||||
TypeLibInfoクラス | |||||||||||
CoClassInfoクラス | |||||||||||
InterfaceInfoクラス | |||||||||||
MemberInfoクラス | |||||||||||
ParameterInfoクラス | |||||||||||
ConstantInfoクラス | |||||||||||
MemberInfoクラス | |||||||||||
InterfaceInfoクラス | |||||||||||
MemberInfoクラス | |||||||||||
ParameterInfoクラス | |||||||||||
TypeInfoクラス | |||||||||||
InterfaceInfoクラス | |||||||||||
MemberInfoクラス | |||||||||||
ParameterInfoクラス | |||||||||||
MemberInfoクラス | |||||||||||
ParameterInfoクラス |
■TLIApplicationクラスの詳細
TLIApplicationクラスにはTLI全般に関する機能が集められており、提供されているメソッドとプロパティは下表の通りです。
(TLIApplicationクラスのメソッドとプロパティ)
ClassInfoFromObjectメソッド | |||||||||||
説明 | Create a TypeInfo object from any running COM object | ||||||||||
定義 | Function ClassInfoFromObject(Object As Unknown) As TypeInfo | ||||||||||
InterfaceInfoFromObjectメソッド | |||||||||||
説明 | Create an InterfaceInfo object from a running IDispatch object | ||||||||||
定義 | Function InterfaceInfoFromObject(Object As Object) As InterfaceInfo | ||||||||||
InvokeHookメソッド | |||||||||||
説明 | Hook to IDispatch::Invoke. ID is Name or MemberID (DispId). List arguments backwards. Supports ByRef. | ||||||||||
定義 | Function InvokeHook(Object As Object, NameOrID As Variant, InvokeKind As InvokeKinds, ReverseArgList() As Variant) As Variant | ||||||||||
InvokeHookArrayメソッド | |||||||||||
説明 | Hook to IDispatch::Invoke. ID is Name or MemberID. Arguments in ReverseArgList must be listed backwards. ByRef args not supported. | ||||||||||
定義 | Function InvokeHookArray(Object As Object, NameOrID As Variant, InvokeKind As InvokeKinds, ReverseArgList() As Variant) As Variant | ||||||||||
InvokeHookArraySubメソッド | |||||||||||
説明 | InvokeHookArray call with no return value. | ||||||||||
定義 | Sub InvokeHookArraySub(Object As Object, NameOrID As Variant, InvokeKind As InvokeKinds, ReverseArgList() As Variant) | ||||||||||
InvokeHookSubメソッド | |||||||||||
説明 | InvokeHook call with no return value. | ||||||||||
定義 | Sub InvokeHookSub(Object As Object, NameOrID As Variant, InvokeKind As InvokeKinds, ReverseArgList() As Variant) | ||||||||||
InvokeIDメソッド | |||||||||||
説明 | Hook to IDispatch::GetIDsOfNames. Retrieve MemberID (DispId) once to speed up multiple InvokeHook calls. | ||||||||||
定義 | Function InvokeID(Object As Object, Name As String) As Long | ||||||||||
InvokeLCIDプロパティ | |||||||||||
説明 | Language Identifier to use in InvokeHook calls. | ||||||||||
定義 | Property InvokeLCID() As Long | ||||||||||
ListBoxNotificationプロパティ | |||||||||||
説明 | Notification object for all Get*Direct methods. Use with Implements. | ||||||||||
定義 | Property ListBoxNotification() As ListBoxNotification | ||||||||||
RecordFieldプロパティ | |||||||||||
説明 | Read and write fields of a VT_RECORD Variant | ||||||||||
定義 | Property RecordField(RecordVariant As Variant, FieldName As String) As Variant | ||||||||||
ResolveAliasesプロパティ | |||||||||||
説明 | Automatically resolve all aliased parameters and return types. Defaults to True. | ||||||||||
定義 | Property ResolveAliases() As Boolean | ||||||||||
TypeInfoFromRecordVariantメソッド | |||||||||||
説明 | Create a TypeInfo object from a VT_RECORD Variant | ||||||||||
定義 | Function TypeInfoFromRecordVariant(RecordVariant As Variant) As TypeInfo | ||||||||||
TypeLibInfoFromFileメソッド | |||||||||||
説明 | Create a TypeLibInfo object from a file | ||||||||||
定義 | Function TypeLibInfoFromFile(FileName As String) As TypeLibInfo | ||||||||||
TypeLibInfoFromRegistryメソッド | |||||||||||
説明 | Create a TypeLibInfo object from a file | ||||||||||
定義 | Function TypeLibInfoFromRegistry(TypeLibGuid As String, MajorVersion As Integer, MinorVersion As Integer, LCID As Long) As TypeLibInfo |
■TypeLibInfoクラスの詳細
TypeLibInfoクラスにはタイプ・ライブラリに関する機能が集められており、提供されているメソッドとプロパティは下表の通りです。
(TypeLibInfoクラスのメソッド)
AddTypesメソッド | |||||||||||
説明 | Add types to a GetTypes* SearchResults object | ||||||||||
定義 | Function AddTypes(TypeInfoNumbers() As Integer, [StartResults As SearchResults = 0], [SearchType As TliSearchTypes = tliStDefault], [Sort As Boolean = True]) As SearchResults | ||||||||||
AddTypesDirectメソッド | |||||||||||
説明 | Add types to a GetTypes* SearchResults object. Add directly to hWnd. | ||||||||||
定義 | Function AddTypesDirect(TypeInfoNumbers() As Integer, hWnd As Integer, [WindowType As TliWindowTypes = tliWtListBox], [SearchType As TliSearchTypes = tliStDefault]) As Integer | ||||||||||
CaseMemberNameメソッド | |||||||||||
説明 | Check if this is a valid member name | ||||||||||
定義 | Function CaseMemberName(bstrName As String, [SearchType As TliSearchTypes = tliStDefault]) As Boolean | ||||||||||
CaseTypeNameメソッド | |||||||||||
説明 | Try to case the name of a type which matches the search criteria. Returns matching search flags. | ||||||||||
定義 | Function CaseTypeName(bstrName As String, [SearchType As TliSearchTypes = tliStDefault]) As TliSearchTypes | ||||||||||
FreeSearchCriteriaメソッド | |||||||||||
説明 | Free cached search information. (8 * TypeInfoCount bytes) | ||||||||||
定義 | Sub FreeSearchCriteria() | ||||||||||
GetMemberInfoメソッド | |||||||||||
説明 | Create MemberInfo object from type and member searches. | ||||||||||
定義 | Function GetMemberInfo(SearchData As Long, [InvokeKinds As InvokeKinds = INVOKE_UNKNOWN], [MemberId As Long = -1], [MemberName As String]) As MemberInfo | ||||||||||
GetMembersメソッド | |||||||||||
説明 | Get members corresponding to SearchData | ||||||||||
定義 | Function GetMembers(SearchData As Long, [ShowUnderscore As Boolean = False]) As SearchResults | ||||||||||
GetMembersDirectメソッド | |||||||||||
説明 | Get members corresponding to SearchData. Add directly to hWnd. | ||||||||||
定義 | Function GetMembersDirect(SearchData As Long, hWnd As Integer, [WindowType As TliWindowTypes = tliWtListBox], [ItemDataType As TliItemDataTypes = tliIdtMemberID], [ShowUnderscore As Boolean = False]) As Integer | ||||||||||
GetMembersWithSubStringメソッド | |||||||||||
説明 | Get matching member names | ||||||||||
定義 | Function GetMembersWithSubString(SubString As String, [StartResults As SearchResults = 0], [SearchType As TliSearchTypes = tliStDefault], [SearchMiddle As Boolean = True], [Helper As SearchHelper = 0], [Sort As Boolean = True], [ShowUnderscore As Boolean = False]) As SearchResults | ||||||||||
GetMembersWithSubStringDirectメソッド | |||||||||||
説明 | Get matching member names. Add directly to hWnd. | ||||||||||
定義 | Function GetMembersWithSubStringDirect(SubString As String, hWnd As Integer, [WindowType As TliWindowTypes = tliWtListBox], [SearchType As TliSearchTypes = tliStDefault], [SearchMiddle As Boolean = True], [Helper As SearchHelper = 0], [ShowUnderscore As Boolean = False]) As Integer | ||||||||||
GetMembersWithSubStringExメソッド | |||||||||||
説明 | Get matching member names grouped by InvokeKind. | ||||||||||
定義 | Function GetMembersWithSubStringEx(SubString As String, InvokeGroupings As Array, [StartResults As SearchResults = 0], [SearchType As TliSearchTypes = tliStDefault], [SearchMiddle As Boolean = True], [Sort As Boolean = True], [ShowUnderscore As Boolean = False]) As SearchResults | ||||||||||
GetTypesメソッド | |||||||||||
説明 | Get types which match the give search criteria. | ||||||||||
定義 | Function GetTypes([StartResults As SearchResults = 0], [SearchType As TliSearchTypes = tliStDefault], [Sort As Boolean = True]) As SearchResults | ||||||||||
GetTypesDirectメソッド | |||||||||||
説明 | Get types which match the give search criteria. Add directly to hWnd. | ||||||||||
定義 | Function GetTypesDirect(hWnd As Integer, [WindowType As TliWindowTypes = tliWtListBox], [SearchType As TliSearchTypes = tliStDefault]) As Integer | ||||||||||
GetTypesWithMemberメソッド | |||||||||||
説明 | Get types with given member | ||||||||||
定義 | Function GetTypesWithMember(MemberName As String, [StartResults As SearchResults = 0], [SearchType As TliSearchTypes = tliStDefault], [Sort As Boolean = True], [ShowUnderscore As Boolean = False]) As SearchResults | ||||||||||
GetTypesWithMemberDirectメソッド | |||||||||||
説明 | Get types with given member. Add directly to hWnd. | ||||||||||
定義 | Function GetTypesWithMemberDirect(MemberName As String, hWnd As Integer, [WindowType As TliWindowTypes = tliWtListBox], [SearchType As TliSearchTypes = tliStDefault], [ShowUnderscore As Boolean = False]) As Integer | ||||||||||
GetTypesWithMemberExメソッド | |||||||||||
説明 | Get types with member, verify InvokeKinds | ||||||||||
定義 | Function GetTypesWithMemberEx(MemberName As String, InvokeKind As InvokeKinds, [StartResults As SearchResults = 0], [SearchType As TliSearchTypes = tliStDefault], [Sort As Boolean = True], [ShowUnderscore As Boolean = False]) As SearchResults | ||||||||||
GetTypesWithSubStringメソッド | |||||||||||
説明 | Get matching type names. | ||||||||||
定義 | Function GetTypesWithSubString(SubString As String, [StartResults As SearchResults = 0], [SearchType As TliSearchTypes = tliStDefault], [SearchMiddle As Boolean = True], [Sort As Boolean = True]) As SearchResults | ||||||||||
GetTypesWithSubStringDirectメソッド | |||||||||||
説明 | Get matching type names. Add directly to hWnd. | ||||||||||
定義 | Function GetTypesWithSubStringDirect(SubString As String, hWnd As Integer, [WindowType As TliWindowTypes = tliWtListBox], [SearchType As TliSearchTypes = tliStDefault], [SearchMiddle As Boolean = True]) As Integer | ||||||||||
IsSameLibraryメソッド | |||||||||||
説明 | Is this the same TypeLib? | ||||||||||
定義 | Function IsSameLibrary(CheckLib As TypeLibInfo) As Boolean | ||||||||||
LoadRegTypeLibメソッド | |||||||||||
説明 | Load a registered typelib | ||||||||||
定義 | Sub LoadRegTypeLib(TypeLibGuid As String, MajorVersion As Integer, MinorVersion As Integer, LCID As Long) | ||||||||||
MakeSearchDataメソッド | |||||||||||
説明 | Generate SearchData for use with GetMembers[Direct] | ||||||||||
定義 | Function MakeSearchData(TypeInfoName As String, [SearchType As TliSearchTypes = tliStDefault]) As Long | ||||||||||
Registerメソッド | |||||||||||
説明 | Register the typelib | ||||||||||
定義 | Sub Register([HelpDir As String]) | ||||||||||
ResetSearchCriteriaメソッド | |||||||||||
説明 | Resets search criteria. Only matching typeinfos will be searched. | ||||||||||
定義 | Sub ResetSearchCriteria([TypeFilter As TypeFlags = TYPEFLAG_DEFAULTFILTER], [IncludeEmptyTypes As Boolean = False], [ShowUnderscore As Boolean = False]) | ||||||||||
SetMemberFiltersメソッド | |||||||||||
説明 | Set filters for member searches (GetMembersWithSubstring[Direct], GetMembers[Direct]) | ||||||||||
定義 | Sub SetMemberFilters([FuncFilter As FuncFlags = FUNCFLAG_DEFAULTFILTER], [VarFilter As VarFlags = VARFLAG_DEFAULTFILTER]) | ||||||||||
UnRegisterメソッド | |||||||||||
説明 | UnRegister the typelib | ||||||||||
定義 | Sub UnRegister() |
(TypeLibInfoクラスのプロパティ)
AppObjStringプロパティ | |||||||||||
説明 | The string to put in the list for an application object entry | ||||||||||
定義 | Property AppObjString() As String | ||||||||||
AppObjStringプロパティ(読み取り専用) | |||||||||||
説明 | The string to put in the list for an application object entry | ||||||||||
定義 | Property AppObjString() As String | ||||||||||
AttributeMaskプロパティ(読み取り専用) | |||||||||||
説明 | Type attribute mask for the library | ||||||||||
定義 | Property AttributeMask() As Integer | ||||||||||
AttributeStringsプロパティ(読み取り専用) | |||||||||||
説明 | Type attributes for the library | ||||||||||
定義 | Property AttributeStrings(AttributeArray() As String) As Integer | ||||||||||
BestEquivalentTypeプロパティ(読み取り専用) | |||||||||||
説明 | Find a corresponding visible type | ||||||||||
定義 | Property BestEquivalentType(TypeInfoName As String) As String | ||||||||||
CoClassesプロパティ(読み取り専用) | |||||||||||
説明 | The CoClasses for the current TypeLib | ||||||||||
定義 | Property CoClasses() As CoClasses | ||||||||||
Constantsプロパティ(読み取り専用) | |||||||||||
説明 | The constants for the current TypeLib | ||||||||||
定義 | Property Constants() As Constants | ||||||||||
ContainingFileプロパティ(読み取り専用) | |||||||||||
説明 | Name of file containing TypeLib | ||||||||||
定義 | Property ContainingFile() As String | ||||||||||
ContainingFileプロパティ | |||||||||||
説明 | Name of file containing TypeLib | ||||||||||
定義 | Property ContainingFile() As String | ||||||||||
CustomDataCollectionプロパティ(読み取り専用) | |||||||||||
説明 | Custom data GUIDs and Values | ||||||||||
定義 | Property CustomDataCollection() As CustomDataCollection | ||||||||||
Declarationsプロパティ(読み取り専用) | |||||||||||
説明 | The declarations for the current TypeLib | ||||||||||
定義 | Property Declarations() As Declarations | ||||||||||
GetTypeInfoプロパティ(読み取り専用) | |||||||||||
説明 | Get TypeInfo directly by Name or TypeInfoNumber | ||||||||||
定義 | Property GetTypeInfo(Index As Variant) As TypeInfo | ||||||||||
GetTypeInfoNumberプロパティ(読み取り専用) | |||||||||||
説明 | Get interface number by name | ||||||||||
定義 | Property GetTypeInfoNumber(Name As String) As Integer | ||||||||||
GetTypeKindプロパティ(読み取り専用) | |||||||||||
説明 | TypeKind of TypeInfo number | ||||||||||
定義 | Property GetTypeKind(TypeInfoNumber As Integer) As TypeKinds | ||||||||||
GUIDプロパティ(読み取り専用) | |||||||||||
説明 | Registry format of TypeLib GUID | ||||||||||
定義 | Property GUID() As String | ||||||||||
HelpContextプロパティ(読み取り専用) | |||||||||||
説明 | HelpContext for the library | ||||||||||
定義 | Property HelpContext() As Long | ||||||||||
HelpFileプロパティ(読み取り専用) | |||||||||||
説明 | HelpFile for the library | ||||||||||
定義 | Property HelpFile() As String | ||||||||||
HelpStringプロパティ(読み取り専用) | |||||||||||
説明 | Helpstring for the library | ||||||||||
定義 | Property HelpString([LCID As Long = 0]) As String | ||||||||||
HelpStringContextプロパティ(読み取り専用) | |||||||||||
説明 | Context ID for use with DLLGetDocumentation | ||||||||||
定義 | Property HelpStringContext() As Long | ||||||||||
HelpStringDllプロパティ(読み取り専用) | |||||||||||
説明 | Dll with DLLGetDocumentation entry point | ||||||||||
定義 | Property HelpStringDll([LCID As Long = 0]) As String | ||||||||||
Interfacesプロパティ(読み取り専用) | |||||||||||
説明 | The interfaces for the current TypeLib | ||||||||||
定義 | Property Interfaces() As Interfaces | ||||||||||
IntrinsicAliasesプロパティ(読み取り専用) | |||||||||||
説明 | The intrinsic aliases for the current TypeLib | ||||||||||
定義 | Property IntrinsicAliases() As IntrinsicAliases | ||||||||||
LCIDプロパティ(読み取り専用) | |||||||||||
説明 | LCID of TypeLib | ||||||||||
定義 | Property LCID() As Long | ||||||||||
LibNumプロパティ | |||||||||||
説明 | The external library number. Placed in ItemData when lists are filled. | ||||||||||
定義 | Property LibNum() As Integer | ||||||||||
LibNumプロパティ(読み取り専用) | |||||||||||
説明 | The external library number. Placed in ItemData when lists are filled. | ||||||||||
定義 | Property LibNum() As Integer | ||||||||||
MajorVersionプロパティ(読み取り専用) | |||||||||||
説明 | Major Version of TypeLib | ||||||||||
定義 | Property MajorVersion() As Integer | ||||||||||
MinorVersionプロパティ(読み取り専用) | |||||||||||
説明 | Minor Version of TypeLib | ||||||||||
定義 | Property MinorVersion() As Integer | ||||||||||
Nameプロパティ(既定)(読み取り専用) | |||||||||||
説明 | Name of the object | ||||||||||
定義 | Property Name() As String | ||||||||||
Recordsプロパティ(読み取り専用) | |||||||||||
説明 | The records for the current TypeLib | ||||||||||
定義 | Property Records() As Records | ||||||||||
SearchDefaultプロパティ | |||||||||||
説明 | Default search filter | ||||||||||
定義 | Property SearchDefault() As TliSearchTypes | ||||||||||
ShowLibNameプロパティ | |||||||||||
説明 | Whether or not to display the library name. | ||||||||||
定義 | Property ShowLibName() As Boolean | ||||||||||
SysKindプロパティ(読み取り専用) | |||||||||||
説明 | SysKind of TypeLib | ||||||||||
定義 | Property SysKind() As SysKinds | ||||||||||
TypeInfoCountプロパティ(読み取り専用) | |||||||||||
説明 | Total TypeInfos in typelib | ||||||||||
定義 | Property TypeInfoCount() As Integer | ||||||||||
TypeInfosプロパティ(読み取り専用) | |||||||||||
説明 | The TypeInfos for the current TypeLib | ||||||||||
定義 | Property TypeInfos() As TypeInfos | ||||||||||
Unionsプロパティ(読み取り専用) | |||||||||||
説明 | The unions for the current TypeLib | ||||||||||
定義 | Property Unions() As Unions |
■CoClassesコレクション、Constantsコレクション、Declarationsコレクション、Interfacesコレクション、 IntrinsicAliasesコレクション、Recordsコレクション、TypeInfosコレクション、Unionsコレクションの詳細
「~コレクション」は「~Infoクラス」の集合体で、提供されているプロパティは下表の通りです(メソッドはありません)。
なお、MembersコレクションとParametersコレクションは少しパターンが違うので、項を分けて説明します。
(~コレクションのプロパティ)
Countプロパティ(読み取り専用) | |||||||||||
説明 | Number of items in collection | ||||||||||
定義 | Property Count() As Integer | ||||||||||
IndexedItemプロパティ(読み取り専用) | |||||||||||
説明 | Fetch by ~Info number | ||||||||||
定義 | Property IndexedItem(~InfoNumber As Integer) As ~Info | ||||||||||
Itemプロパティ(既定)(読み取り専用) | |||||||||||
説明 | ~Info object | ||||||||||
定義 | Property Item(Index As Integer) As ~Info | ||||||||||
NamedItemプロパティ(読み取り専用) | |||||||||||
説明 | Fetch by name | ||||||||||
定義 | Property NamedItem(~InfoName As String) As ~Info |
■CoClassInfoクラス、ConstantInfoクラス、DeclarationInfoクラス、InterfaceInfoクラス、IntrinsicAliasInfoクラス、RecordInfoクラス、TypeInfoクラス、UnionInfoクラスの詳細
「~Infoクラス」で提供されているプロパティは下表の通りです(メソッドはありません)が、クラスによって若干の相違があるので、対応表を併せて掲載します。
なお、MemberInfoクラスとParameterInfoクラスは少しパターンが違うので、項を分けて説明します。
(~Infoクラスのプロパティ)
AttributeMaskプロパティ(読み取り専用) | |||||||||||
説明 | Type attribute mask for the ~Info | ||||||||||
定義 | Property AttributeMask() As Integer | ||||||||||
AttributeStringsプロパティ(読み取り専用) | |||||||||||
説明 | Type attributes for the ~Info | ||||||||||
定義 | Property AttributeStrings(AttributeArray() As String) As Integer | ||||||||||
CustomDataCollectionプロパティ(読み取り専用) | |||||||||||
説明 | Custom data GUIDs and Values | ||||||||||
定義 | Property CustomDataCollection() As CustomDataCollection | ||||||||||
DefaultEventInterfaceプロパティ(読み取り専用) | |||||||||||
説明 | Information for Default Event Interface. CoClassInfo only. | ||||||||||
定義 | Property DefaultEventInterface() As InterfaceInfo | ||||||||||
DefaultInterfaceプロパティ(読み取り専用) | |||||||||||
説明 | Information for Default Interface. CoClassInfo only. | ||||||||||
定義 | Property DefaultInterface() As InterfaceInfo | ||||||||||
GetMemberプロパティ(読み取り専用) | |||||||||||
説明 | Member by name or MemID | ||||||||||
定義 | Property GetMember(Index As Variant) As MemberInfo | ||||||||||
GUIDプロパティ(読み取り専用) | |||||||||||
説明 | Registry format of ~Info GUID | ||||||||||
定義 | Property GUID() As String | ||||||||||
HelpContextプロパティ(読み取り専用) | |||||||||||
説明 | HelpContext for the ~Info | ||||||||||
定義 | Property HelpContext() As Long | ||||||||||
HelpFileプロパティ(読み取り専用) | |||||||||||
説明 | HelpFile for the ~Info | ||||||||||
定義 | Property HelpFile() As String | ||||||||||
HelpStringプロパティ(読み取り専用) | |||||||||||
説明 | Helpstring for the ~Info | ||||||||||
定義 | Property HelpString([LCID As Long = 0]) As String | ||||||||||
HelpStringContextプロパティ(読み取り専用) | |||||||||||
説明 | Context ID for use with DLLGetDocumentation | ||||||||||
定義 | Property HelpStringContext() As Long | ||||||||||
HelpStringDllプロパティ(読み取り専用) | |||||||||||
説明 | Dll with DLLGetDocumentation entry point | ||||||||||
定義 | Property HelpStringDll([LCID As Long = 0]) As String | ||||||||||
ImpliedInterfacesプロパティ(読み取り専用) | |||||||||||
説明 | Interfaces collection | ||||||||||
定義 | Property ImpliedInterfaces() As Interfaces | ||||||||||
Interfacesプロパティ(読み取り専用) | |||||||||||
説明 | Interfaces collection | ||||||||||
定義 | Property Interfaces() As Interfaces | ||||||||||
MajorVersionプロパティ(読み取り専用) | |||||||||||
説明 | Major Version of ~Info | ||||||||||
定義 | Property MajorVersion() As Integer | ||||||||||
Membersプロパティ(読み取り専用) | |||||||||||
説明 | Members collection | ||||||||||
定義 | Property Members() As Members | ||||||||||
MinorVersionプロパティ(読み取り専用) | |||||||||||
説明 | Minor Version of ~Info | ||||||||||
定義 | Property MinorVersion() As Integer | ||||||||||
Nameプロパティ(既定)(読み取り専用) | |||||||||||
説明 | Name of the object | ||||||||||
定義 | Property Name() As String | ||||||||||
Parentプロパティ(読み取り専用) | |||||||||||
説明 | Containing TypeLibInfo object | ||||||||||
定義 | Property Parent() As TypeLibInfo | ||||||||||
ResolvedTypeプロパティ(読み取り専用) | |||||||||||
説明 | Base type. Valid only if TypeKind is TKIND_ALIAS. | ||||||||||
定義 | Property ResolvedType() As Var~Info | ||||||||||
~InfoNumberプロパティ(読み取り専用) | |||||||||||
説明 | Actual Index of ~Info in TypeLib | ||||||||||
定義 | Property ~InfoNumber() As Integer | ||||||||||
TypeKindプロパティ(読み取り専用) | |||||||||||
説明 | TypeKind of the ~Info, numeric value | ||||||||||
定義 | Property TypeKind() As TypeKinds | ||||||||||
TypeKindStringプロパティ(読み取り専用) | |||||||||||
説明 | TypeKind of the ~Info, string | ||||||||||
定義 | Property TypeKindString() As String | ||||||||||
VTableInterfaceプロパティ(読み取り専用) | |||||||||||
説明 | VTable version of this interface | ||||||||||
定義 | Property VTableInterface() As InterfaceInfo |
(~Infoクラスのプロパティ対応表)
CoClassInfoクラス | ConstantInfoクラス | DeclarationInfoクラス | InterfaceInfoクラス | IntrinsicAliasInfoクラス | RecordInfoクラス | TypeInfoクラス | UnionInfoクラス | |
---|---|---|---|---|---|---|---|---|
AttributeMaskプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
AttributeStringsプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
CustomDataCollectionプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
DefaultEventInterfaceプロパティ | ○ | × | × | × | × | × | ○ | × |
DefaultInterfaceプロパティ | ○ | × | × | × | × | × | ○ | × |
GetMemberプロパティ | × | ○ | ○ | ○ | × | ○ | ○ | ○ |
GUIDプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
HelpContextプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
HelpFileプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
HelpStringプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
HelpStringContextプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
HelpStringDllプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
ImpliedInterfacesプロパティ | × | × | × | ○ | × | × | × | × |
Interfacesプロパティ | ○ | × | × | × | × | × | ○ | × |
MajorVersionプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
Membersプロパティ | × | ○ | ○ | ○ | × | ○ | ○ | ○ |
MinorVersionプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
Nameプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
Parentプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
ResolvedTypeプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
TypeInfoNumbeプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
TypeKindプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
TypeKindStringプロパティ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
VTableInterfaceプロパティ | × | × | × | ○ | × | × | ○ | × |
■Membersコレクション、MemberInfoクラスの詳細
MembersコレクションとMemberInfoクラスで提供されているメソッドおよびプロパティは下表の通りです。
(Membersコレクションのメソッドとプロパティ)
Countプロパティ(読み取り専用) | |||||||||||
説明 | Number of items in collection | ||||||||||
定義 | Property Count() As Integer | ||||||||||
FuncFilterプロパティ | |||||||||||
説明 | Method exclusion filter | ||||||||||
定義 | Property FuncFilter() As FuncFlags | ||||||||||
GetFilteredMembersプロパティ(読み取り専用) | |||||||||||
説明 | Get members without named duplicates | ||||||||||
定義 | Property GetFilteredMembers([ShowUnderscore As Boolean]) As SearchResults | ||||||||||
GetFilteredMembersDirectメソッド | |||||||||||
説明 | Get members without named duplicates (Clear and fill hWnd) | ||||||||||
定義 | Function GetFilteredMembersDirect(hWnd As Integer, [WindowType As TliWindowTypes], [ItemDataType As TliItemDataTypes], [ShowUnderscore As Boolean]) As Integer | ||||||||||
Itemプロパティ(既定)(読み取り専用) | |||||||||||
説明 | MemberInfo object | ||||||||||
定義 | Property Item(Index As Integer) As MemberInfo | ||||||||||
VarFilterプロパティ | |||||||||||
説明 | Property exclusion filter | ||||||||||
定義 | Property VarFilter() As VarFlags |
(MemberInfoクラスのメソッドとプロパティ)
AttributeMaskプロパティ(読み取り専用) | |||||||||||
説明 | Type attribute mask for the member | ||||||||||
定義 | Property AttributeMask() As Integer | ||||||||||
AttributeStringsプロパティ(読み取り専用) | |||||||||||
説明 | Type attributes for the member | ||||||||||
定義 | Property AttributeStrings(AttributeArray() As String) As Integer | ||||||||||
CallConvプロパティ(読み取り専用) | |||||||||||
説明 | Calling convention of member | ||||||||||
定義 | Property CallConv() As CallConvs | ||||||||||
CustomDataCollectionプロパティ(読み取り専用) | |||||||||||
説明 | Custom data GUIDs and Values | ||||||||||
定義 | Property CustomDataCollection() As CustomDataCollection | ||||||||||
DescKindプロパティ(読み取り専用) | |||||||||||
説明 | DescKind of member. | ||||||||||
定義 | Property DescKind() As DescKinds | ||||||||||
GetDllEntryメソッド | |||||||||||
説明 | Get Dll name and entry point. | ||||||||||
定義 | Sub GetDllEntry(DllName As String, EntryName As String, Ordinal As Integer) | ||||||||||
HelpContextプロパティ(読み取り専用) | |||||||||||
説明 | HelpContext for the member | ||||||||||
定義 | Property HelpContext() As Long | ||||||||||
HelpFileプロパティ(読み取り専用) | |||||||||||
説明 | HelpFile for the member | ||||||||||
定義 | Property HelpFile() As String | ||||||||||
HelpStringプロパティ(読み取り専用) | |||||||||||
説明 | Helpstring for the member | ||||||||||
定義 | Property HelpString([LCID As Long]) As String | ||||||||||
HelpStringContextプロパティ(読み取り専用) | |||||||||||
説明 | HelpStringContext for the member | ||||||||||
定義 | Property HelpStringContext() As Long | ||||||||||
HelpStringDllプロパティ(読み取り専用) | |||||||||||
説明 | Dll with DLLGetDocumentation entry point | ||||||||||
定義 | Property HelpStringDll([LCID As Long]) As String | ||||||||||
InvokeKindプロパティ(読み取り専用) | |||||||||||
説明 | InvokeKind of member | ||||||||||
定義 | Property InvokeKind() As InvokeKinds | ||||||||||
MemberIdプロパティ(読み取り専用) | |||||||||||
説明 | MemberId (DispId) for member function or variable. | ||||||||||
定義 | Property MemberId() As Long | ||||||||||
Nameプロパティ(既定)(読み取り専用) | |||||||||||
説明 | Name of the object | ||||||||||
定義 | Property Name() As String | ||||||||||
Parametersプロパティ(読み取り専用) | |||||||||||
説明 | Parameters Collection | ||||||||||
定義 | Property Parameters() As Parameters | ||||||||||
ReturnTypeプロパティ(読み取り専用) | |||||||||||
説明 | VarTypeInfo object for returned type | ||||||||||
定義 | Property ReturnType() As VarTypeInfo | ||||||||||
Valueプロパティ(読み取り専用) | |||||||||||
説明 | Value of the member, ConstantInfo only | ||||||||||
定義 | Property Value() As Variant | ||||||||||
VTableOffsetプロパティ(読み取り専用) | |||||||||||
説明 | VTable Offset of member. -1 if not available. | ||||||||||
定義 | Property VTableOffset() As Integer |
■Parametersコレクション、ParameterInfoクラスの詳細
ParametersコレクションとParameterInfoクラスで提供されているプロパティは下表の通りです(メソッドはありません)。
(Parametersコレクションのプロパティ)
Countプロパティ(読み取り専用) | |||||||||||
説明 | Number of items in collection | ||||||||||
定義 | Property Count() As Integer | ||||||||||
DefaultCountプロパティ(読み取り専用) | |||||||||||
説明 | Number of default parameters. Not included in optional count. | ||||||||||
定義 | Property DefaultCount() As Integer | ||||||||||
Itemプロパティ(既定)(読み取り専用) | |||||||||||
説明 | ParameterInfo object | ||||||||||
定義 | Property Item(Index As Integer) As ParameterInfo | ||||||||||
OptionalCountプロパティ(読み取り専用) | |||||||||||
説明 | Number of optional parameters | ||||||||||
定義 | Property OptionalCount() As Integer |
(ParameterInfoクラスのプロパティ)
CustomDataCollectionプロパティ(読み取り専用) | |||||||||||
説明 | Custom data GUIDs and Values | ||||||||||
定義 | Property CustomDataCollection() As CustomDataCollection | ||||||||||
Defaultプロパティ(読み取り専用) | |||||||||||
説明 | Default Parameter | ||||||||||
定義 | Property Default() As Boolean | ||||||||||
DefaultValueプロパティ(読み取り専用) | |||||||||||
説明 | Default value | ||||||||||
定義 | Property DefaultValue() As Variant | ||||||||||
Flagsプロパティ(読み取り専用) | |||||||||||
説明 | Parameter Flags | ||||||||||
定義 | Property Flags() As ParamFlags | ||||||||||
HasCustomDataプロパティ(読み取り専用) | |||||||||||
説明 | Check if custom data is available | ||||||||||
定義 | Property HasCustomData() As Boolean | ||||||||||
Nameプロパティ(既定)(読み取り専用) | |||||||||||
説明 | Name of the object | ||||||||||
定義 | Property Name() As String | ||||||||||
Optionalプロパティ(読み取り専用) | |||||||||||
説明 | Optional Parameter | ||||||||||
定義 | Property Optional() As Boolean | ||||||||||
VarTypeInfoプロパティ(読み取り専用) | |||||||||||
説明 | VarTypeInfo object for this parameter | ||||||||||
定義 | Property VarTypeInfo() As VarTypeInfo |
■VarTypeInfoクラスの詳細
CoClassInfoクラス・ConstantInfoクラス・DeclarationInfoクラス・InterfaceInfoクラス・IntrinsicAliasInfoクラス・RecordInfoクラス・TypeInfoクラス・UnionInfoクラスのResolvedTypeプロパティ、MemberInfoクラスのReturnTypeプロパティ、ParameterInfoクラスのVarTypeInfoプロパティは、VarTypeInfoオブジェクト(クラス)を返します。
VarTypeInfoクラスで提供されているメソッドとプロパティは下表の通りで、標準的な「タイプ」についてはVarTypeプロパティでTliVarType列挙体で定義された値を返し、ユーザが定義した「タイプ」についてはTypeInfoNumberプロパティでTypeInfoクラスで定義された「タイプ」のインデックス番号を返します。
(VarTypeInfoクラスのメソッドとプロパティ)
ArrayBoundsメソッド | |||||||||||
説明 | Get bounds for VT_VECTOR array. LBound in column 1, UBound in column 2. | ||||||||||
定義 | Function ArrayBounds(Bounds() As Long) As Integer | ||||||||||
ElementPointerLevelプロパティ(読み取り専用) | |||||||||||
説明 | Dereferencing level for type of an array element | ||||||||||
定義 | Property ElementPointerLevel() As Integer | ||||||||||
IsExternalTypeプロパティ(読み取り専用) | |||||||||||
説明 | Is TypeInfo external to this library | ||||||||||
定義 | Property IsExternalType() As Boolean | ||||||||||
PointerLevelプロパティ(読み取り専用) | |||||||||||
説明 | Dereferencing level of type | ||||||||||
定義 | Property PointerLevel() As Integer | ||||||||||
TypedVariantプロパティ(読み取り専用) | |||||||||||
説明 | Get a variant with this VarType | ||||||||||
定義 | Property TypedVariant() As Variant | ||||||||||
TypeInfoプロパティ(読み取り専用) | |||||||||||
説明 | Type information for VT_PTR VarType | ||||||||||
定義 | Property TypeInfo() As TypeInfo | ||||||||||
TypeInfoNumberプロパティ(読み取り専用) | |||||||||||
説明 | TypeInfo number for 0 VarType (Cheaper than TypeInfo property) | ||||||||||
定義 | Property TypeInfoNumber() As Integer | ||||||||||
TypeLibInfoExternalプロパティ(読み取り専用) | |||||||||||
説明 | External typelib. Same as TypeInfo.Parent. | ||||||||||
定義 | Property TypeLibInfoExternal() As TypeLibInfo | ||||||||||
VarTypeプロパティ(既定)(読み取り専用) | |||||||||||
説明 | VarType of Parameter | ||||||||||
定義 | Property VarType() As TliVarType |
■TLIで定義されている列挙体の詳細
TLIで定義されている列挙体は下表の通りです。
Name | Value | |
---|---|---|
CallConvs列挙体 | ||
OLE Automation CALLCONV values | ||
CC_FASTCALL | 0 | |
CC_CDECL | 1 | |
CC_MSCPASCAL | 2 | |
CC_PASCAL | 2 | |
CC_MACPASCAL | 3 | |
CC_STDCALL | 4 | |
CC_FPFASTCALL | 5 | |
CC_SYSCALL | 6 | |
CC_MPWCDECL | 7 | |
CC_MPWPASCAL | 8 | |
CC_MAX | 9 | |
DescKinds列挙体 | ||
OLE Automation DESCKIND values | ||
DESCKIND_NONE | 0 | |
DESCKIND_FUNCDESC | 1 | |
DESCKIND_VARDESC | 2 | |
FuncFlags列挙体 | ||
OLE Automation FUNCFLAG values | ||
FUNCFLAG_NONE | 0 | |
FUNCFLAG_FRESTRICTED | 1 | |
FUNCFLAG_FSOURCE | 2 | |
FUNCFLAG_FBINDABLE | 4 | |
FUNCFLAG_FREQUESTEDIT | 8 | |
FUNCFLAG_FDISPLAYBIND | 16 | |
FUNCFLAG_FDEFAULTBIND | 32 | |
FUNCFLAG_FHIDDEN | 64 | |
FUNCFLAG_DEFAULTFILTER | 65 | |
FUNCFLAG_FUSESGETLASTERROR | 128 | |
FUNCFLAG_FDEFAULTCOLLELEM | 256 | |
FUNCFLAG_FUIDEFAULT | 512 | |
FUNCFLAG_FNONBROWSABLE | 1024 | |
FUNCFLAG_FREPLACEABLE | 2048 | |
FUNCFLAG_FIMMEDIATEBIND | 4096 | |
IDLFlags列挙体 | ||
OLE Automation IDLFLAG values | ||
IDLFLAG_NONE | 0 | |
IDLFLAG_FIN | 1 | |
IDLFLAG_FOUT | 2 | |
IDLFLAG_FLCID | 4 | |
IDLFLAG_FRETVAL | 8 | |
ImplTypeFlags列挙体 | ||
OLE Automation IMPLTYPEFLAG values | ||
IMPLTYPEFLAG_FDEFAULT | 1 | |
IMPLTYPEFLAG_FSOURCE | 2 | |
IMPLTYPEFLAG_FRESTRICTED | 4 | |
IMPLTYPEFLAG_FDEFAULTVTABLE | 8 | |
InvokeKinds列挙体 | ||
OLE Automation INVOKEKIND values | ||
INVOKE_UNKNOWN | 0 | |
INVOKE_FUNC | 1 | |
INVOKE_PROPERTYGET | 2 | |
INVOKE_PROPERTYPUT | 4 | |
INVOKE_PROPERTYPUTREF | 8 | |
INVOKE_EVENTFUNC | 16 | |
INVOKE_CONST | 32 | |
LibFlags列挙体 | ||
OLE Automation LIBFLAG values | ||
LIBFLAG_FRESTRICTED | 1 | |
LIBFLAG_FCONTROL | 2 | |
LIBFLAG_FHIDDEN | 4 | |
LIBFLAG_FHASDISKIMAGE | 8 | |
ParamFlags列挙体 | ||
OLE Automation PARAMFLAG values | ||
PARAMFLAG_NONE | 0 | |
PARAMFLAG_FIN | 1 | |
PARAMFLAG_FOUT | 2 | |
PARAMFLAG_FLCID | 4 | |
PARAMFLAG_FRETVAL | 8 | |
PARAMFLAG_FOPT | 16 | |
PARAMFLAG_FHASDEFAULT | 32 | |
PARAMFLAG_FHASCUSTDATA | 64 | |
SysKinds列挙体 | ||
OLE Automation SYS values | ||
SYS_WIN16 | 0 | |
SYS_WIN32 | 1 | |
SYS_MAC | 2 | |
TliCustomFilterAction列挙体 | ||
Actions for CustomFilter.Visit | ||
tliCfaLeave | 0 | |
tliCfaDuplicate | 1 | |
tliCfaExtract | 2 | |
tliCfaDelete | 3 | |
TliErrors列挙体 | ||
Custom errors raised by TLI | ||
tliErrNoCurrentTypelib | -2147220991 | |
tliErrCantLoadLibrary | -2147220990 | |
tliErrTypeLibNotRegistered | -2147220989 | |
tliErrSearchResultsChanged | -2147220988 | |
tliErrNotApplicable | -2147220987 | |
tliErrIncompatibleData | -2147220986 | |
tliErrIncompatibleSearchType | -2147220985 | |
tliErrIncompatibleTypeKind | -2147220984 | |
tliErrInaccessibleImportLib | -2147220983 | |
tliErrNoDefaultValue | -2147220982 | |
tliErrDataNotAvailable | -2147220981 | |
tliErrNotAnEntryPoint | -2147220980 | |
tliErrStopFiltering | -2147220979 | |
tliErrArrayBoundsNotAvailable | -2147220978 | |
tliErrSearchResultsNotSorted | -2147220977 | |
tliErrTypeNotArray | -2147220976 | |
TliItemDataTypes列挙体 | ||
Determine ItemData content for GetMembers*Direct methods | ||
tliIdtMemberID | 0 | |
tliIdtInvokeKinds | 1 | |
TliSearchTypes列挙体 | ||
Determines content of SearchResults collection | ||
tliStClasses | 1 | |
tliStEvents | 2 | |
tliStConstants | 4 | |
tliStDeclarations | 8 | |
tliStAppObject | 16 | |
tliStRecords | 32 | |
tliStIntrinsicAliases | 64 | |
tliStUnions | 128 | |
tliStAll | 239 | |
tliStDefault | 4096 | |
TliVarType列挙体 | ||
OLE Automation VARIANT types | ||
VT_EMPTY | 0 | |
VT_NULL | 1 | |
VT_I2 | 2 | |
VT_I4 | 3 | |
VT_R4 | 4 | |
VT_R8 | 5 | |
VT_CY | 6 | |
VT_DATE | 7 | |
VT_BSTR | 8 | |
VT_DISPATCH | 9 | |
VT_ERROR | 10 | |
VT_BOOL | 11 | |
VT_VARIANT | 12 | |
VT_UNKNOWN | 13 | |
VT_DECIMAL | 14 | |
VT_I1 | 16 | |
VT_UI1 | 17 | |
VT_UI2 | 18 | |
VT_UI4 | 19 | |
VT_I8 | 20 | |
VT_UI8 | 21 | |
VT_INT | 22 | |
VT_UINT | 23 | |
VT_VOID | 24 | |
VT_HRESULT | 25 | |
VT_PTR | 26 | |
VT_SAFEARRAY | 27 | |
VT_CARRAY | 28 | |
VT_USERDEFINED | 29 | |
VT_LPSTR | 30 | |
VT_LPWSTR | 31 | |
VT_RECORD | 36 | |
VT_FILETIME | 64 | |
VT_BLOB | 65 | |
VT_STREAM | 66 | |
VT_STORAGE | 67 | |
VT_STREAMED_OBJECT | 68 | |
VT_STORED_OBJECT | 69 | |
VT_BLOB_OBJECT | 70 | |
VT_CF | 71 | |
VT_CLSID | 72 | |
VT_VECTOR | 4096 | |
VT_ARRAY | 8192 | |
VT_BYREF | 16384 | |
VT_RESERVED | 32768 | |
TliWindowTypes列挙体 | ||
Values for window class of hWnd in Get*Direct methods | ||
tliWtListBox | 0 | |
tliWtComboBox | 1 | |
TypeFlags列挙体 | ||
OLE Automation TYPEFLAG values | ||
TYPEFLAG_NONE | 0 | |
TYPEFLAG_FAPPOBJECT | 1 | |
TYPEFLAG_FCANCREATE | 2 | |
TYPEFLAG_FLICENSED | 4 | |
TYPEFLAG_FPREDECLID | 8 | |
TYPEFLAG_FHIDDEN | 16 | |
TYPEFLAG_FCONTROL | 32 | |
TYPEFLAG_FDUAL | 64 | |
TYPEFLAG_FNONEXTENSIBLE | 128 | |
TYPEFLAG_FOLEAUTOMATION | 256 | |
TYPEFLAG_FRESTRICTED | 512 | |
TYPEFLAG_ALIASATTRIBUTES | 528 | |
TYPEFLAG_DEFAULTFILTER | 528 | |
TYPEFLAG_ENUMATTRIBUTES | 528 | |
TYPEFLAG_MODULEATTRIBUTES | 528 | |
TYPEFLAG_RECORDATTRIBUTES | 528 | |
TYPEFLAG_UNIONATTRIBUTES | 528 | |
TYPEFLAG_FAGGREGATABLE | 1024 | |
TYPEFLAG_COCLASSATTRIBUTES | 1599 | |
TYPEFLAG_FREPLACEABLE | 2048 | |
TYPEFLAG_FDISPATCHABLE | 4096 | |
TYPEFLAG_FREVERSEBIND | 8192 | |
TYPEFLAG_FPROXY | 16384 | |
TYPEFLAG_DISPATCHATTRIBUTES | 23232 | |
TYPEFLAG_INTERFACEATTRIBUTES | 31680 | |
TypeKinds列挙体 | ||
OLE Automation TYPEKIND values | ||
TKIND_ENUM | 0 | |
TKIND_RECORD | 1 | |
TKIND_MODULE | 2 | |
TKIND_INTERFACE | 3 | |
TKIND_DISPATCH | 4 | |
TKIND_COCLASS | 5 | |
TKIND_ALIAS | 6 | |
TKIND_UNION | 7 | |
TKIND_MAX | 8 | |
VarFlags列挙体 | ||
OLE Automation VARFLAG values | ||
VARFLAG_NONE | 0 | |
VARFLAG_FREADONLY | 1 | |
VARFLAG_FSOURCE | 2 | |
VARFLAG_FBINDABLE | 4 | |
VARFLAG_FREQUESTEDIT | 8 | |
VARFLAG_FDISPLAYBIND | 16 | |
VARFLAG_FDEFAULTBIND | 32 | |
VARFLAG_FHIDDEN | 64 | |
VARFLAG_FRESTRICTED | 128 | |
VARFLAG_DEFAULTFILTER | 192 | |
VARFLAG_FDEFAULTCOLLELEM | 256 | |
VARFLAG_FUIDEFAULT | 512 | |
VARFLAG_FNONBROWSABLE | 1024 | |
VARFLAG_FREPLACEABLE | 2048 | |
VARFLAG_FIMMEDIATEBIND | 4096 |
■TLIを使用するための事前準備
TLIを使用するための事前準備は、以下の3ステップです。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。
①ライブラリの参照設定
Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでTypeLib Informationのチェックボックスにチェックを入れ、[OK]ボタンを押下。
②オブジェクト変数の定義
プログラムの宣言部でオブジェクト変数を定義。
- Dim ta As TLI.TLIApplication
- Dim tl As TLI.TypeLibInfo
③インスタンスの生成
プログラムの処理部でインスタンスを生成した後、TLIApplicationオブジェクトのTypeLibInfoFromFileメソッドでTypeLibInfoオブジェクトを生成。
- Set ta = New TLI.TLIApplication
- Set tl = ta.TypeLibInfoFromFile(“xxx.DLL")
■TLIを使用したタイプ・ライブラリ情報の取得方法
TypeLibInfoオブジェクトのTypeInfosプロパティ・Unionsプロパティにより、それぞれのコレクションを取得後、各オブジェクトのMembersプロパティによりMemberInfoオブジェクトを取得します。
引数の情報を取得したい場合は、さらにMemberInfoオブジェクトのParametersプロパティにより、ParameterInfoオブジェクトを取得します。
タイプ・ライブラリから全ての情報を取得したい場合
TypeLibInfoオブジェクトのTypeInfosプロパティによりTypeInfosコレクションを使用すれば、タイプ・ライブラリで定義されている「タイプ」を全て取得することができます。
但し、定義されている「タイプ」の種類によって取得できる情報が異なるため、TypeInfoオブジェクトのTypeKindプロパティまたはTypeKindStringプロパティにより種類を判定する必要があります。
- Dim ti As tli.TypeInfo
- Dim ii As tli.InterfaceInfo
- Dim mi As tli.MemberInfo
- Dim pi As tli.ParameterInfo
- For Each ti In tl.TypeInfos
- Select Case ti.TypeKindString
- Case “coclass"
- For Each ii In ti.Interfaces
- For Each mi In ii.Members
- For Each pi In mi.Members
- 'CoClassのメソッド、プロパティ等の処理
- Next pi
- Next mi
- Next ii
- Case “dispinterface", “module"
- For Each mi In ti.Members
- For Each pi In mi.Members
- 'CoClass以外のメソッド、プロパティ等の処理
- Next pi
- Next mi
- Case “enum"
- For Each mi In ti.Members
- '列挙体の処理
- Next mi
- End Select
- Next ti
タイプ・ライブラリから指定したクラスの情報を取得したい場合
TypeInfosコレクションのNamedItemプロパティにより、指定したクラス名のTypeInfoオブジェクトを取得すれば、後は前項と同様に処理を行うことができます。
- Dim ti As tli.TypeInfo
- Dim ci As tli.CoClassInfo
- Dim ii As tli.InterfaceInfo
- Dim mi As tli.MemberInfo
- Dim pi As tli.ParameterInfo
- Set ti = tl.TypeInfos.NamedItem(“クラス名"))
- Select Case ti.TypeKindString
- Case “coclass"
- Set ci = tl.CoClasses.NamedItem(ti.Name)
- For Each ii In ci.Interfaces
- For Each mi In ii.Members
- For Each pi In mi.Parameters
- 'CoClassのメソッド、プロパティ等の処理
- Next pi
- Next mi
- Next ii
- Case “dispinterface", “module"
- For Each mi In ti.Members
- For Each pi In mi.Parameters
- 'CoClass以外のメソッド、プロパティ等の処理
- Next pi
- Next mi
- End Select
■オブジェクト・ブラウザと同等の情報を表示する方法
前項で述べた処理方式により、とりあえずタイプ・ライブラリの情報を参照できますが、オブジェクト・ブラウザと同等の情報を表示するためには、表示対象とするメンバーを絞り込んだうえ、表示に必要な情報を取得する必要があります。
オブジェクト・ブラウザでメソッドやプロパティを選択すると、下図のような定義情報(使用方法)が表示されますが、このような表示を行う際に必要な処理についても次項で説明します。
- 種類 名称(引数1 As タイプ1, [引数2 As タイプ2 = 規定値]) As タイプ3
- (※)種類は「Sub」「Function」「Property」「Event」のいずれか。
取得した情報から表示するメンバーを特定する方法
前述の方法で情報を取得すると、非開示の情報も含めた全ての情報が参照できてしまうため、各オブジェクトのAttributeを取得し、「hidden」または「restricted」のメンバーを除外します。
Attributeを取得するためにはAttributeStringsプロパティを使用し、ストリング型の配列に返されたAttributeの内容を判定します(以下のサンプルはMemberInfoオブジェクトの例です)。
(※)この判定だけだと一部のメンバーが余計に表示されてしまうため、後述のサンプル・プログラムでは、Nameの先頭1バイトが「_(アンダーバー)」のメンバーも除外しています。
- Dim attr() As String
- Dim i, acnt As Long
- acnt = mi.AttributeStrings(attr)
- If acnt <> 0 Then
- For i = 1 To acnt
- If (attr(i) = “hidden") Or (attr(i) = “restricted") Then
- '除外するための処理
- End If
- Next i
- End If
メソッドやプロパティの「種類」を判定する方法
MemberInfoオブジェクトのInvokeKindプロパティで判定しますが、このプロパティの戻り値は下表のようになっているため、戻り値が「1」の場合には他の条件と組合せて判定する必要があります。
CoClassの場合、TypeInfoオブジェクトのDefaultEventInterfaceプロパティでIntefacesコレクションを取得すると、Eventとして定義されたメンバーを取得できるため、後述のサンプル・プログラムでは「Method」と判定されたメンバーについて、Eventとして定義されたメンバーとMemberIDプロパティの値で突合し、マッチした場合に「Event」に書換えています(EventとMethodで同じ名前のメンバーが存在するケースがあるため、Nameだけで突合すると正しく判定できません)。
書換えられずに残ったメンバーが「Method」ですが、ReturnTypeプロパティの値が「Void」であれば「Sub」、「Void」以外であれば「Function」です。
Propertyは戻り値が細かく分かれているので判定は容易ですが、同じ名称で複数メンバーが存在する(例えば、「Property Get」と「Property Put」の2メンバー)ため、「読み取り専用」の判定を行う場合は注意が必要です。
なお、MemberIDプロパティの値が0の場合は、規定のプロパティ(※)です。
(※)プロパティの指定を省略した場合に仮定されるプロパティ。オブジェクト・ブラウザの場合は、プロパティのアイコンに「レ」点の付いたアイコンで表示されます。
(InvokeKindプロパティの戻り値)
戻り値 | 内容 |
---|---|
1 | 「Sub」「Function」「Event」 |
2 | 「Property Get」 |
4 | 「Property Put」 |
8 | 「Property Put Ref」 |
引数の情報を取得する方法
引数の情報はMemberInfoオブジェクトのParametersプロパティによりParametersコレクションを取得し、ParameterInfoオブジェクトを順に参照して取得します。
DefaultプロパティがTrueであれば省略可能を意味しており、DefaultValueプロパティに設定されている値が規定値です。
引数の型が列挙体を示している場合は、DefaultValueプロパティの値を列挙体で定義されている名称に置換えます(下図参照)。
- Set ti = tl.TypeInfos.NamedItem(列挙体の名称)
- For Each mi In ti.Members
- If mi.Value = (DefaultValueの値) Then
- (DefaultValueの値) = mi.Name
- End If
- Next mi
タイプ(型)の情報を取得する方法
VarTypeInfoクラスの項で説明した通り、標準的な「タイプ」についてはVarTypeプロパティでTliVarType列挙体で定義された値を返し、ユーザが定義した「タイプ」についてはTypeInfoNumberプロパティでTypeInfoクラスで定義された「タイプ」のインデックス番号を返します。
TliVarType列挙体のNameは「VT_XXX」といった形式で定義されているので、基本的には「VT_」の部分を取り除けば良いのですが、それだけではオブジェクト・ブラウザで表示される形にはなりませんので、デコード処理が必要になります(後述のサンプル・プログラム参照)。
VarTypeプロパティの値が「0(Empty)」の場合は、TypeInfoNumberプロパティの値(インデックス番号)でTypeInfoオブジェクトの値(デコード値)を取得します。
- If (VarTypeの値) = “Empty" Then
- If vi.TypeInfoNumber <> -1 Then
- (VarTypeのデコード値) = tl.TypeInfos.Item(vi.TypeInfoNumber + 1)
- End If
- End If
■タイプ・ライブラリからメソッド、プロパティ、列挙体の情報を取得する処理
タイプ・ライブラリからメソッド、プロパティ、列挙体の情報を取得し、Excelシートに一覧表示表示するプログラムです。
⇒本稿に掲載したメソッド、プロパティ、列挙体等の表は、このExcelツールの処理結果を加工したものです。
データ宣言部とメイン・プロシジャ
行番号22~42で項目見出しをセット、行番号43でTLIApplicationオブジェクト、行番号44でTLIのTypeLibInfoオブジェクト、行番号45で処理対象となるタイプ・ライブラリのTypeLibInfoオブジェクトを作成しています。
行番号49~108の繰返し処理の中は「CoClass」「CoClass以外」「列挙体」で処理を分けています。
行番号54~65で「CoClass」の処理を行った後、行番号66~76で「Method」を「Event」に置換える処理を行っています(※)。
行番号78~87は「CoClass以外」の処理、行番号89~105は「列挙体」の処理です。
行番号59、82では改行せずに「InvokeKind」を追加していますが、これは複数メンバーに分かれている「Property」の情報を1行にまとめています。
なお、行番号50~51、行番号56~57、行番号79~80、行番号94~95は、非開示のメンバーを除外する処理です。
(※)DefaultEventInterfaceプロパティは、CoClassの場合しか使用できないため、「CoClass」の箇所にだけ置換え処理を入れています。
- Dim sht As Worksheet
- Dim tli As tli.TypeLibInfo
- Dim ta As tli.TLIApplication
- Dim tl As tli.TypeLibInfo
- Dim ci As tli.CoClassInfo
- Dim ii As tli.InterfaceInfo
- Dim mi As tli.MemberInfo
- Dim pi As tli.ParameterInfo
- Dim si As tli.ConstantInfo
- Dim ti As tli.TypeInfo
- Dim vi As tli.VarTypeInfo
- Dim dti As tli.TypeInfo
- Dim dmi As tli.MemberInfo
- Dim attr() As String
- Dim VarTypeName() As String
- Dim VarTypeValue() As Long
- Dim i, rcnt, ccnt, acnt As Long
- Private Sub Sample2()
- Set sht = ActiveSheet
- sht.Cells.NumberFormatLocal = “@"
- sht.Range(“A1:L2").Interior.Color = RGB(127, 127, 127)
- sht.Range(“A1:L2").Font.Bold = True
- sht.Range(“A1:L2").HorizontalAlignment = xlCenter
- sht.Range(“A1") = “TypeInfo"
- sht.Range(“A1:B1").Merge
- sht.Range(“A2") = “Name"
- sht.Range(“B2") = “TypeKind"
- sht.Range(“C1") = “Member"
- sht.Range(“C1:G1").Merge
- sht.Range(“C2") = “MemberID"
- sht.Range(“D2") = “Name"
- sht.Range(“E2") = “InvokeKind"
- sht.Range(“F2") = “ReturnType"
- sht.Range(“G2") = “HelpString"
- sht.Range(“H1") = “Parameter"
- sht.Range(“H1:L1").Merge
- sht.Range(“H2") = “Count"
- sht.Range(“I2") = “Name"
- sht.Range(“J2") = “TypeInfo"
- sht.Range(“K2") = “Default"
- sht.Range(“L2") = “DefaultValue"
- Set ta = New tli.TLIApplication
- Set tli = ta.TypeLibInfoFromFile(“TLBINF32.DLL")
- Set tl = ta.TypeLibInfoFromFile(“xxx.DLL")
- Call InitializeTable
- rcnt = 2
- For Each ti In tl.TypeInfos
- acnt = ti.AttributeStrings(attr)
- If (Left(ti.Name, 1) <> “_") And (CheckAttribute = True) Then
- Select Case ti.TypeKindString
- Case “coclass"
- For Each ii In ti.Interfaces
- For Each mi In ii.Members
- acnt = mi.AttributeStrings(attr)
- If (Left(mi.Name, 1) <> “_") And (CheckAttribute = True) Then
- If (rcnt >= 3) And (sht.Cells(rcnt, 4) = mi.Name) Then
- sht.Cells(rcnt, 5) = sht.Cells(rcnt, 5) & “," & DecodeInvokeKinds(mi.InvokeKind)
- Else
- Call DisplayMemberInfo
- End If
- End If
- Next mi
- Next ii
- Set ii = ti.DefaultEventInterface
- If Not (ii Is Nothing) Then
- For Each mi In ii.Members
- For i = 3 To sht.Cells(sht.Rows.Count, 4).End(xlUp).Row
- If (sht.Cells(i, 1) = ti.Name) And (sht.Cells(i, 3) = mi.MemberId) Then
- sht.Cells(i, 5) = “Event"
- Exit For
- End If
- Next i
- Next mi
- End If
- Case “dispinterface", “module"
- For Each mi In ti.Members
- acnt = mi.AttributeStrings(attr)
- If (Left(mi.Name, 1) <> “_") And (CheckAttribute = True) Then
- If (rcnt >= 3) And (sht.Cells(rcnt, 4) = mi.Name) Then
- sht.Cells(rcnt, 5) = sht.Cells(rcnt, 5) & “," & DecodeInvokeKinds(mi.InvokeKind)
- Else
- Call DisplayMemberInfo
- End If
- End If
- Next mi
- Case “enum"
- rcnt = rcnt + 1
- sht.Cells(rcnt, 1) = ti.Name
- sht.Cells(rcnt, 2) = ti.TypeKindString
- sht.Cells(rcnt, 7) = ti.HelpString
- For Each mi In ti.Members
- acnt = mi.AttributeStrings(attr)
- If (Left(mi.Name, 1) <> “_") And (CheckAttribute = True) Then
- rcnt = rcnt + 1
- sht.Cells(rcnt, 1) = ti.Name
- sht.Cells(rcnt, 2) = ti.TypeKindString
- sht.Cells(rcnt, 3) = mi.MemberId
- sht.Cells(rcnt, 4) = mi.Name
- sht.Cells(rcnt, 5) = mi.Value
- sht.Cells(rcnt, 6) = DecodeVarType(mi.ReturnType)
- sht.Cells(rcnt, 7) = mi.HelpString
- End If
- Next mi
- End Select
- End If
- Next ti
- Set vi = Nothing
- Set pi = Nothing
- Set mi = Nothing
- Set ii = Nothing
- Set ti = Nothing
- Set tl = Nothing
- Set tli = Nothing
- Set ta = Nothing
- End Sub
メンバーの属性をチェックするサブ・プロシジャ
非開示のメンバーを除外する処理が何箇所もあって煩雑なため、Attributeの中に「hidden」または「restricted」が存在するかどうかを判定する処理を関数化したものです。
- Private Function CheckAttribute() As Boolean
- Dim i As Integer
- CheckAttribute = True
- If acnt <> 0 Then
- For i = 1 To acnt
- If (attr(i) = “hidden") Or (attr(i) = “restricted") Then
- CheckAttribute = False
- End If
- Next i
- End If
- End Function
メンバーの情報をセットするサブ・プロシジャ
「CoClass」と「CoClass以外」で同様の処理を行うため、編集処理を括り出したものです。
- Private Sub DisplayMemberInfo()
- rcnt = rcnt + 1
- sht.Cells(rcnt, 1) = ti.Name
- sht.Cells(rcnt, 2) = ti.TypeKindString
- sht.Cells(rcnt, 3) = mi.MemberId
- sht.Cells(rcnt, 4) = mi.Name
- sht.Cells(rcnt, 5) = DecodeInvokeKinds(mi.InvokeKind)
- sht.Cells(rcnt, 6) = DecodeVarType(mi.ReturnType)
- sht.Cells(rcnt, 7) = mi.HelpString
- sht.Cells(rcnt, 8) = mi.Parameters.Count
- ccnt = 9
- For Each pi In mi.Parameters
- sht.Cells(rcnt, ccnt) = pi.Name
- sht.Cells(rcnt, ccnt + 1) = DecodeVarType(pi.VarTypeInfo)
- sht.Cells(rcnt, ccnt + 2) = pi.Default
- If pi.Default = True Then
- sht.Cells(rcnt, ccnt + 3) = DecodeDefaultValue(sht.Cells(rcnt, ccnt + 1), pi.DefaultValue)
- End If
- ccnt = ccnt + 4
- Next pi
- End Sub
タイプの情報をデコードするサブ・プロシジャ
行番号1~41でデコード用の情報を内部テーブルに展開しておき、行番号43~64で内部テーブルを使用してデコードしています。
デコードした結果が「Empty」の場合はユーザ定義型とみなし、行番号61でTypeInfoオブジェクトから名称を取得しています。
行番号48の判定を「If wNum >= VarTypeValue(i) Then」とし、行番号56の「wNum = wNum – VarTypeValue(i)」でVarTypeの減算処理を行っていますが、例えば「Array(=8192)」かつ「String(=8)」の場合、VarTypeの値が「8200(=8192+8)」のように合算値となっているためです。
行番号66~83はInvokeKindのデコード処理、行番号85~99はDefaultValueのデコード処理で、引数の型が列挙体を示している場合には、行番号94でDefaultValueプロパティの値を列挙体で定義されている名称に置換えています。
- Private Sub InitializeTable()
- ReDim VarTypeName(1 To tli.Constants.NamedItem(“TliVarType").Members.Count)
- ReDim VarTypeValue(1 To tli.Constants.NamedItem(“TliVarType").Members.Count)
- For i = 1 To tli.Constants.NamedItem(“TliVarType").Members.Count
- VarTypeValue(i) = tli.Constants.NamedItem(“TliVarType").Members.Item(i).Value
- Select Case VarTypeValue(i)
- Case 2
- VarTypeName(i) = “Integer"
- Case 3
- VarTypeName(i) = “Long"
- Case 4
- VarTypeName(i) = “Single"
- Case 5
- VarTypeName(i) = “Double"
- Case 6
- VarTypeName(i) = “Currency"
- Case 8
- VarTypeName(i) = “String"
- Case 9
- VarTypeName(i) = “Object"
- Case 11
- VarTypeName(i) = “Boolean"
- Case 17
- VarTypeName(i) = “Byte"
- Case 22
- VarTypeName(i) = “Integer"
- Case 23
- VarTypeName(i) = “UInteger"
- Case 25
- VarTypeName(i) = “HRESULT"
- Case 29
- VarTypeName(i) = “User Defined"
- Case 72
- VarTypeName(i) = “Class ID"
- Case 16384
- VarTypeName(i) = “By Ref"
- Case Else
- VarTypeName(i) = Mid(tli.Constants.NamedItem(“TliVarType").Members.Item(i).Name, 4, 1) & LCase(Mid(tli.Constants.NamedItem(“TliVarType").Members.Item(i).Name, 5))
- End Select
- Next i
- End Sub
- Private Function DecodeVarType(vi As tli.VarTypeInfo) As String
- Dim wNum, i As Integer
- wNum = vi.VarType
- DecodeVarType = “"
- For i = UBound(VarTypeValue) To 1 Step -1
- If wNum >= VarTypeValue(i) Then
- If DecodeVarType = “" Then
- DecodeVarType = VarTypeName(i)
- Else
- If VarTypeName(i) <> “Empty" Then
- DecodeVarType = DecodeVarType & " " & VarTypeName(i)
- End If
- End If
- wNum = wNum – VarTypeValue(i)
- End If
- Next i
- If DecodeVarType = “Empty" Then
- If vi.TypeInfoNumber <> -1 Then
- DecodeVarType = tl.TypeInfos.Item(vi.TypeInfoNumber + 1)
- End If
- End If
- End Function
- Private Function DecodeInvokeKinds(InvokeKindNum As Integer) As String
- Select Case InvokeKindNum
- Case 1
- DecodeInvokeKinds = “Method"
- Case 2
- DecodeInvokeKinds = “Property Get"
- Case 4
- DecodeInvokeKinds = “Property Put"
- Case 8
- DecodeInvokeKinds = “Property Put Ref"
- Case 16
- DecodeInvokeKinds = “Event"
- Case 32
- DecodeInvokeKinds = “Constant"
- Case Else
- DecodeInvokeKinds = “Unknown"
- End Select
- End Function
- Private Function DecodeDefaultValue(VarType As String, DefaultValue As Variant) As Variant
- DecodeDefaultValue = DefaultValue
- Set dti = tl.TypeInfos.NamedItem(VarType)
- If dti Is Nothing Then
- Exit Function
- End If
- If dti.TypeKindString = “enum" Then
- For Each dmi In dti.Members
- If dmi.Value = DefaultValue Then
- DecodeDefaultValue = dmi.Name
- Exit Function
- End If
- Next dmi
- End If
- End Function
Excel VBAのタイプ情報について
前掲のサンプル・プログラムでEXCEL.EXEを解析したところ、一部の機能が外部のオブジェクト・ライブラリを参照していることがわかりました。
外部のオブジェクト・ライブラリを参照している場合、VarTypeInfoクラスのIsExternalTypeプロパティにTrueが設定され(通常はFalse)、TypeLibInfoExternalプロパティにアプリケーション名が設定されています。
EXCEL.EXEで使用している外部のオブジェクト・ライブラリは下表の通りです。
アプリケーション名 | ファイル名 | 説明 |
---|---|---|
Office | MSO.DLL | Microsoft Office xx.x Object Library |
VBIDE | VBE6EXT.OLB | Microsoft Visual Basic for Applications Extensibility x.x |
(サンプル・プログラムの修正例)
TypeLibInfo用のオブジェクト変数として、tli、tlo、tlv、tleの4つを定義し、TypeLibInfoFromFileメソッドでTLBINF32.DLL、MSO.DLL、VBE6EXT.OLB、EXCEL.EXEを割当てたうえ、DecodeVarType関数を以下のように修正すると正しく表示されます(行番号19~28が修正箇所です)。
- Private Function DecodeVarType(vi As tli.VarTypeInfo) As String
- Dim wNum, i As Integer
- wNum = vi.VarType
- DecodeVarType = “"
- For i = UBound(VarTypeValue) To 1 Step -1
- If wNum >= VarTypeValue(i) Then
- If DecodeVarType = “" Then
- DecodeVarType = VarTypeName(i)
- Else
- If VarTypeName(i) <> “Empty" Then
- DecodeVarType = DecodeVarType & " " & VarTypeName(i)
- End If
- End If
- wNum = wNum – VarTypeValue(i)
- End If
- Next i
- If DecodeVarType = “Empty" Then
- If vi.TypeInfoNumber <> -1 Then
- If vi.IsExternalType = True Then
- Select Case vi.TypeLibInfoExternal
- Case “Office"
- DecodeVarType = tlo.TypeInfos.Item(vi.TypeInfoNumber + 1)
- Case “VBIDE"
- DecodeVarType = tlv.TypeInfos.Item(vi.TypeInfoNumber + 1)
- End Select
- Else
- DecodeVarType = tle.TypeInfos.Item(vi.TypeInfoNumber + 1)
- End If
- End If
- End If
- End Function
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ
ディスカッション
コメント一覧
まだ、コメントがありません