Win32 API 日本語リファレンス
ホームSystem.Com › ITypeLib

ITypeLib

COM
IID00020402-0000-0000-c000-000000000046継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

タイプライブラリ、すなわち一連のオブジェクトを記述するデータを表します。(ITypeLib)

解説(Remarks)

システムレジストリには、インストールされているすべてのタイプライブラリの一覧が格納されています。タイプライブラリの構成を次の図に示します。

:::image type="content" source="./images/oa03_10.Png" border="false" alt-text="インストールされたタイプライブラリがシステムレジストリに列挙される際の構成を示す図。":::

ITypeLib インターフェイスは、型情報のライブラリにアクセスするためのメソッドを提供します。このインターフェイスは以下をサポートします。

メソッド 10

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 DWORD GetTypeInfoCount()

タイプライブラリ内に存在する型情報の数を返します。

戻り値

タイプライブラリ内の型情報の数。

vtbl 4 HRESULT GetTypeInfo(DWORD index, ITypeInfo** ppTInfo)

ライブラリ内の指定された型情報を取得します。

indexDWORDin返されるインターフェイスのインデックス。
ppTInfoITypeInfo**out成功した場合、ITypeInfo インターフェイスへのポインターのポインターを返します。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
TYPE_E_ELEMENTNOTFOUND
index パラメーターが、0 から GetTypeInfoCount - 1 までの範囲外です。
E_INVALIDARG
1 つ以上の引数が無効です。
E_OUTOFMEMORY
操作を完了するためのメモリが不足しています。

解説(Remarks)

デュアルインターフェイスの場合、GetTypeInfoTKIND_DISPATCH の型情報のみを返します。TKIND_INTERFACE の型情報を取得するには、TKIND_DISPATCH の型情報に対してインデックス -1 を指定して GetRefTypeOfImplType を呼び出します。その後、返された型情報のハンドルを GetRefTypeInfo に渡します。

次の例は、デュアルインターフェイスの TKIND_INTERFACE 型情報を取得します。

HRESULT hr;
hr = ptlib->GetTypeInfo((unsigned int) dwIndex, &ptypeinfoDisp);
if (FAILED(hr)) {
   //free resources
   return hr;
}
hr = ptypeinfoDisp->GetRefTypeOfImplType(-1, &phreftype);
if (FAILED(hr)) {
   //free resources
   return hr;

hr = ptypeinfoDisp->GetRefTypeInfo(phreftype, &ptypeinfoInt);
if (FAILED(hr)) {
   //free resources
   return hr;

// 
vtbl 5 HRESULT GetTypeInfoType(DWORD index, TYPEKIND* pTKind)

型情報の種類を取得します。

indexDWORDinタイプライブラリ内の型情報のインデックス。
pTKindTYPEKIND*out型情報の TYPEKIND 列挙値。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
TYPE_E_ELEMENTNOTFOUND
index パラメーターが、0 から GetTypeInfoCount - 1 までの範囲外です。
vtbl 6 HRESULT GetTypeInfoOfGuid(GUID* guid, ITypeInfo** ppTinfo)

指定された GUID に対応する型情報を取得します。

guidGUID*in型情報の GUID。
ppTinfoITypeInfo**outITypeInfo インターフェイス。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
TYPE_E_ELEMENTNOTFOUND
指定された GUID を持つ型情報がライブラリ内に見つかりませんでした。
E_INVALIDARG
1 つ以上の引数が無効です。
E_OUTOFMEMORY
操作を完了するためのメモリが不足しています。
vtbl 7 HRESULT GetLibAttr(TLIBATTR** ppTLibAttr)

ライブラリの属性を格納する構造体を取得します。

ppTLibAttrTLIBATTR**outライブラリの属性。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_INVALIDARG
1 つ以上の引数が無効です。
E_OUTOFMEMORY
操作を完了するためのメモリが不足しています。

解説(Remarks)

TLIBATTR 構造体が占有するメモリを解放するには、ITypeLib::ReleaseTLibAttr を使用します。

vtbl 8 HRESULT GetTypeComp(ITypeComp** ppTComp)

クライアントコンパイラが、ライブラリの型、変数、定数、およびグローバル関数にバインドできるようにします。

ppTCompITypeComp**outこの ITypeLib に対する ITypeComp インスタンス。クライアントコンパイラは、ITypeComp インターフェイスのメソッドを使用して、ITypeLib 内の型や、ITypeLib 内で定義されたグローバル関数、変数、定数にバインドします。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_INVALIDARG
1 つ以上の引数が無効です。
E_OUTOFMEMORY
操作を完了するためのメモリが不足しています。

解説(Remarks)

返された TypeCompBind 関数は、グローバル関数、変数、定数、列挙値、および coclass メンバーにバインドします。Bind 関数は、TKIND_MODULETKIND_ENUMTKIND_COCLASS の TYPEKIND 列挙の名前にもバインドします。これらの名前は、型情報内で定義された任意のグローバル名を隠蔽します。Application オブジェクトとしてマークされた TKIND_ENUMTKIND_MODULETKIND_COCLASS 型のメンバーは、モジュール名を指定せずに ITypeComp から直接バインドできます。

ITypeComp::Bind および ITypeComp::BindType は、修飾されていない名前のみを受け付けます。ITypeLib::GetTypeCompITypeComp インターフェイスへのポインターを返し、これを使用してライブラリ内のグローバル要素にバインドします。一部の型(TKIND_ENUMTKIND_MODULETKIND_COCLASS)の名前は、変数、関数、定数、および列挙子と名前空間を共有します。

メンバーを名前空間内の他の項目と区別するために修飾が必要な場合、目的のメンバーにバインドするために各修飾子ごとに GetTypeComp を順次呼び出すことができます。これにより、プログラミング言語のコンパイラは、修飾名でバインドできないメンバーであっても、モジュール、列挙型、および coclass のメンバーにアクセスできます。

vtbl 9 HRESULT GetDocumentation(INT index, LPWSTR* pBstrName, LPWSTR* pBstrDocString, DWORD* pdwHelpContext, LPWSTR* pBstrHelpFile)

ライブラリのドキュメント文字列、完全なヘルプファイル名とパス、およびヘルプファイル内のライブラリのヘルプトピックのコンテキスト識別子を取得します。

indexINTinドキュメントを返す対象の型情報のインデックス。index が -1 の場合、ライブラリ自体のドキュメントが返されます。
pBstrNameLPWSTR*outoptional指定された項目の名前。呼び出し側が項目名を必要としない場合、pBstrName は null にできます。
pBstrDocStringLPWSTR*outoptional指定された項目のドキュメント文字列。呼び出し側がドキュメント文字列を必要としない場合、pBstrDocString は null にできます。
pdwHelpContextDWORD*out指定された項目に関連付けられたヘルプコンテキスト識別子(ID)。呼び出し側がヘルプコンテキスト ID を必要としない場合、pdwHelpContext は null にできます。
pBstrHelpFileLPWSTR*outoptionalヘルプファイルの完全修飾名。呼び出し側がヘルプファイル名を必要としない場合、pBstrHelpFile は null にできます。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_INVALIDARG
1 つ以上の引数が無効です。
STG_E_INSUFFICIENTMEMORY
操作を完了するためのメモリが不足しています。

解説(Remarks)

呼び出し側は、パラメーター pBstrNamepBstrDocString、および pBstrHelpFile を解放する必要があります。

vtbl 10 HRESULT IsName(LPWSTR szNameBuf, DWORD lHashVal, BOOL* pfName)

渡された文字列が、ライブラリに記述された型またはメンバーの名前を含むかどうかを示します。

szNameBufLPWSTRinoutテストする文字列。このメソッドが成功した場合、szNameBuf はタイプライブラリ内で見つかった大文字小文字(表記)に一致するよう変更されます。
lHashValDWORDinszNameBuf のハッシュ値。
pfNameBOOL*outszNameBuf がタイプライブラリ内で見つかった場合は true、それ以外の場合は false。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_INVALIDARG
1 つ以上の引数が無効です。
E_OUTOFMEMORY
操作を完了するためのメモリが不足しています。
vtbl 11 HRESULT FindName(LPWSTR szNameBuf, DWORD lHashVal, ITypeInfo** ppTInfo, INT* rgMemId, WORD* pcFound)

タイプライブラリ内で型情報の出現箇所を検索します。これは、タイプライブラリ内に名前が存在することを素早く確認するために使用できます。

szNameBufLPWSTRinout検索する名前。
lHashValDWORDin検索を高速化するためのハッシュ値。LHashValOfNameSys 関数によって計算されます。lHashVal = 0 の場合、値が計算されます。
ppTInfoITypeInfo**outszNameBuf で指定された名前を含む型情報へのポインターの配列。このパラメーターを null にすることはできません。
rgMemIdINT*out見つかった項目の配列。rgMemId[i] は、ppTInfo[i] で指定された型情報にインデックスする MEMBERID です。このパラメーターを null にすることはできません。
pcFoundWORD*inout

入力時には、検索するインスタンスの数を示します。たとえば、最初の出現箇所を見つけるには *pcFound = 1 として呼び出せます。1 つ見つかると検索は停止します。

出力時には、見つかったインスタンスの数を示します。*pcFound の入力値と出力値が同一である場合、その名前を含む型情報がさらに存在する可能性があります。

戻り値

このメソッドは、次のいずれかの値を返します。

戻り値 説明
S_OK
成功。
E_INVALIDARG
1 つ以上の引数が無効です。
E_OUTOFMEMORY
操作を完了するためのメモリが不足しています。

解説(Remarks)

*pcFound = n を渡すことは、ppTInfo および rgMemId 配列に n 個の (ptinfo, memid) ペアを格納するのに十分な領域があることを示します。szNameBuf 内の名前が ppTInfo[i] の型情報の名前である場合、この関数は rgMemId[i] に MEMBERID_NIL を返します。

vtbl 12 void ReleaseTLibAttr(TLIBATTR* pTLibAttr)

GetLibAttr から元々取得した TLIBATTR を解放します。

pTLibAttrTLIBATTR*in解放する TLIBATTR。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ITypeLib "{00020402-0000-0000-C000-000000000046}"
#usecom global ITypeLib IID_ITypeLib "{}"
#comfunc global ITypeLib_GetTypeInfoCount   3
#comfunc global ITypeLib_GetTypeInfo        4 int,sptr
#comfunc global ITypeLib_GetTypeInfoType    5 int,var
#comfunc global ITypeLib_GetTypeInfoOfGuid  6 var,sptr
#comfunc global ITypeLib_GetLibAttr         7 var
#comfunc global ITypeLib_GetTypeComp        8 sptr
#comfunc global ITypeLib_GetDocumentation   9 int,var,var,var,var
#comfunc global ITypeLib_IsName             10 var,int,var
#comfunc global ITypeLib_FindName           11 var,int,sptr,var,var
#comfunc global ITypeLib_ReleaseTLibAttr    12 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。