ICreateTypeInfo
COM公式ドキュメント
型定義を通じて定義される型情報の作成と管理のためのツールを提供します。(ICreateTypeInfo)
メソッド 23
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
型定義に関連付けられるグローバル一意識別子 (GUID) を設定します。
| guid | GUID* | in | 型定義に関連付けるグローバル一意 ID。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 |
解説(Remarks)
インターフェイスの場合、これはインターフェイス ID (IID) です。coclass の場合、これはクラス ID (CLSID) です。GUID の詳細については、型ライブラリとオブジェクト記述言語 を参照してください。
作成中の型定義の型フラグを設定します。
| uTypeFlags | DWORD | in | 型フラグの設定値。詳細については、TYPEFLAGS を参照してください。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 型が一致しません。 |
型ブラウザーによって表示されるドキュメント文字列を設定します。
| pStrDoc | LPWSTR | in | 型定義の簡単な説明。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 型ライブラリの状態がこの操作に対して無効です。 |
型情報のヘルプコンテキスト ID を設定します。
| dwHelpContext | DWORD | in | ヘルプコンテキストへのハンドル。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 |
型情報のメジャーバージョン番号とマイナーバージョン番号を設定します。
| wMajorVerNum | WORD | in | メジャーバージョン番号。 |
| wMinorVerNum | WORD | in | マイナーバージョン番号。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 出力先に書き込めません。 | |
| 型ライブラリの状態がこの操作に対して無効です。 |
作成中の型定義から参照される型定義に、型定義を追加します。
| pTInfo | ITypeInfo* | in | 参照される型定義。 |
| phRefType | DWORD* | in | この型定義が参照先の型情報に関連付けるハンドル。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 型が一致しません。 |
解説(Remarks)
2 番目のパラメーターは、追加された型情報のハンドルへのポインターを返します。同じ型情報に対して以前に AddRefTypeInfo が呼び出されている場合、前回の呼び出しで返されたインデックスが phRefType に返されます。参照先の型定義が作成中の型ライブラリ内にある場合、その型定義の ICreateTypeInfo インターフェイスに対して IUnknown::QueryInterface(IID_ITypeInfo, ...) を呼び出すことで、その型情報を取得できます。
型定義に関数の記述を追加します。
| index | DWORD | in | 型情報における新しい FUNCDESC のインデックス。 |
| pFuncDesc | FUNCDESC* | in | 関数を記述する FUNCDESC 構造体。FUNCDESC 内の bstrIDLInfo フィールドは null にする必要があります。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 型が一致しません。 |
解説(Remarks)
インデックスは、型情報内での関数の順序を指定します。最初の関数のインデックスは 0 です。型情報内の関数の数から 1 を引いた値を超えるインデックスを指定すると、エラーが返されます。この関数を呼び出しても、FUNCDESC 構造体の所有権が ICreateTypeInfo に渡されることはありません。したがって、呼び出し元は引き続き FUNCDESC 構造体を解放する必要があります。
TYPEKIND が TKIND_MODULE の場合、または oVft が -1 もしくは 0 の場合、渡された FUNCDESC の仮想関数テーブル (VTBL) フィールド (oVft) は無視されます。この属性は ICreateTypeInfo::LayOut が呼び出されたときに設定されます。TYPEKIND が TKIND_DISPATCH でデュアルインターフェイスの場合、または TYPEKIND が TKIND_INTERFACE の場合には、oVft の値が使用されます。oVft が使用される場合、マシン上の sizeof(VOID *) の倍数である必要があります。そうでない場合、関数は失敗し、HRESULT として E_INVALIDARG が返されます。
関数 AddFuncDesc は、TYPEKIND = TKIND_DISPATCH または TKIND_INTERFACE のクラスについて、各 FUNCDESC 内に渡されたメンバー識別子 (memid) フィールドを使用します。メンバー ID が MEMBERID_NIL に設定されている場合、AddFuncDesc は関数にメンバー ID を割り当てます。それ以外の場合、各 FUNCDESC 内のメンバー ID フィールドは無視されます。
FUNCDESC 構造体内の HREFTYPE フィールドはすべて、AddFuncDesc が呼び出される対象と同じ ITypeInfo インスタンスによって生成されたものでなければなりません。
同じプロパティの get アクセサー関数と put アクセサー関数は、同じディスパッチ識別子 (DISPID) を持つ必要があります。
継承されるインターフェイス、またはコンポーネントオブジェクトクラス (coclass) によって実装されるインターフェイスを指定します。
| index | DWORD | in | 追加する実装クラスのインデックス。他の型に対する相対的な型の順序を指定します。 |
| hRefType | DWORD | in | AddRefType の記述から取得した、参照先の型定義へのハンドル。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 型が一致しません。 |
解説(Remarks)
継承されるインターフェイスを指定するには、index = 0 を使用します。構文 2 の dispinterface の場合、ICreateTypeInfo::AddImplType を 2 回呼び出します。1 回目は継承される IDispatch に対して index = 0 で、2 回目はラップされるインターフェイスに対して index = 1 で呼び出します。デュアルインターフェイスの場合、そのデュアルインターフェイスの TKIND_INTERFACE 型情報コンポーネントに対して index = -1 で ICreateTypeInfo::AddImplType を呼び出します。
型の実装インターフェイスまたは継承インターフェイスの属性を設定します。
| index | DWORD | in | 型フラグを設定するインターフェイスのインデックス。 |
| implTypeFlags | IMPLTYPEFLAGS | in | 設定する IMPLTYPE フラグ。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 |
TYPEKIND=TKIND_RECORD の項目に対するデータの配置境界 (アラインメント) を指定します。
| cbAlignment | WORD | in | 型のアラインメント方式。値 0 は 64K 境界での配置を示し、1 は特別なアラインメントを行わないことを示します。その他の値の場合、n は n バイト境界での配置を示します。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 型ライブラリの状態がこの操作に対して無効です。 |
解説(Remarks)
アラインメントは、自然なアラインメント (例: バイトデータはバイト境界、ワードデータはワード境界など) と、cbAlignment で示されるアラインメントの、いずれか小さい方になります。
| pStrSchema | LPWSTR | in | 型情報に設定するスキーマ文字列を指定する。 |
型定義に変数またはデータメンバーの記述を追加します。
| index | DWORD | in | 型定義に追加する変数またはデータメンバーのインデックス。 |
| pVarDesc | VARDESC* | in | 追加する変数またはデータメンバーの記述へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 型が一致しません。 |
解説(Remarks)
インデックスは変数の順序を指定します。最初の変数のインデックスは 0 です。指定したインデックスが現在型情報に含まれる変数の数より大きい場合、ICreateTypeInfo::AddVarDesc はエラーを返します。この関数を呼び出しても、VARDESC 構造体の所有権が ICreateTypeInfo に渡されることはありません。VARDESC 構造体のインスタンスフィールド (oInst) は無視されます。この属性は ICreateTypeInfo::LayOut が呼び出されたときにのみ設定されます。また、クラスの TYPEKIND が TKIND_DISPATCH でない限り、各 VARDESC 内のメンバー ID フィールドは無視されます。
VARDESC 構造体内の HREFTYPE フィールドはすべて、AddVarDesc が呼び出される対象と同じ ITypeInfo インスタンスによって生成されたものでなければなりません。
AddVarDesc は ELEMDESC の idldesc フィールドの内容を無視します。
関数の名前とそのパラメーターの名前を、指定した名前に設定します。
| index | DWORD | in | 関数名とパラメーター名を設定する対象の関数のインデックス。 |
| rgszNames | LPWSTR* | in | 名前へのポインターの配列。最初の要素は関数名です。以降の要素はパラメーター名です。 |
| cNames | DWORD | in | rgszNames 配列内の要素数。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 要素が見つかりません。 |
解説(Remarks)
このメソッドは各プロパティに対して 1 回使用する必要があります。put および putref アクセサー関数の最後のパラメーターには名前が付きません。
変数の名前を設定します。
| index | DWORD | in | 変数のインデックス。 |
| szName | LPWSTR | in | 名前。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 要素が見つかりません。 |
TYPEKIND=TKIND_ALIAS の場合に、この型定義がエイリアスとなる対象の型定義を設定します。
| pTDescAlias | TYPEDESC* | in | 型定義。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 型が一致しません。 |
解説(Remarks)
エイリアスの型を設定するには、TYPEKIND が TKIND_ALIAS である型定義に対して SetTypeDescAlias を呼び出します。
指定したインデックスを持つ関数に DLL のエントリポイントを関連付けます。
| index | DWORD | in | 関数のインデックス。 |
| szDllName | LPWSTR | in | エントリポイントを含む DLL の名前。 |
| szProcName | LPWSTR | in | エントリポイントの名前、または序数 (上位ワードが 0 の場合)。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 要素が見つかりません。 | |
| 型が一致しません。 |
解説(Remarks)
szProcName の上位ワードが 0 の場合、下位ワードにはエントリポイントの序数が含まれている必要があります。そうでない場合、szProcName はエントリポイントの名前を表す、null で終了する文字列を指します。
指定したインデックスを持つ関数のドキュメント文字列を設定します。
| index | DWORD | in | 関数のインデックス。 |
| szDocString | LPWSTR | in | ドキュメント文字列。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 要素が見つかりません。 |
解説(Remarks)
ドキュメント文字列は、型ブラウザーなどのツールで使用することを目的とした、関数の簡単な説明です。すべてのプロパティアクセサー関数は 1 つの名前で識別されるため、SetFuncDocString は各プロパティに対して 1 回使用するだけで済みます。
指定したインデックスを持つ変数のドキュメント文字列を設定します。
| index | DWORD | in | 変数のインデックス。 |
| szDocString | LPWSTR | in | ドキュメント文字列。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 要素が見つかりません。 |
指定したインデックスを持つ関数のヘルプコンテキスト ID を設定します。
| index | DWORD | in | 関数のインデックス。 |
| dwHelpContext | DWORD | in | ヘルプトピックのヘルプコンテキスト ID。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 要素が見つかりません。 |
解説(Remarks)
すべてのプロパティアクセサー関数は 1 つの名前で識別されるため、SetFuncHelpContext は各プロパティに対して 1 回設定するだけで済みます。
指定したインデックスを持つ変数のヘルプコンテキスト ID を設定します。
| index | DWORD | in | 変数のインデックス。 |
| dwHelpContext | DWORD | in | 変数に関するヘルプトピックのヘルプコンテキスト ID へのハンドル。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 要素が見つかりません。 |
型定義または関数に関連付けられたマーシャリングオペコード文字列を設定します。
| index | DWORD | in | オペコード文字列を設定する対象のメンバーのインデックス。index が -1 の場合、型定義に対してオペコード文字列を設定します。 |
| bstrMops | LPWSTR | in | マーシャリングオペコード文字列。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 1 つ以上の引数が無効です。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 |
| pIdlDesc | IDLDESC* | in | 型に関連付ける IDL 属性を記述する IDLDESC 構造体へのポインタを指定する。 |
仮想関数に VTBL オフセットを、インスタンスごとのデータメンバーにインスタンスオフセットを割り当て、デュアルインターフェイス用の 2 つの型定義を作成します。
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値コード | 説明 |
|---|---|
| 成功しました。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 出力先に書き込めません。 | |
| 操作を完了するためのメモリが不足しています。 | |
| 認識されない型にバインドされています。 | |
| 型ライブラリの状態がこの操作に対して無効です。 | |
| 型が一致しません。 | |
| 要素が見つかりません。 | |
| この名前を持つ項目が複数存在します。 | |
| 型情報が長すぎます。 | |
| 型が一致しません。 |
解説(Remarks)
クラスの TYPEKIND が TKIND_DISPATCH でない限り、LayOut は関数と変数にメンバー ID 番号も割り当てます。型情報のすべてのメンバーを定義した後、かつ型ライブラリを保存する前に LayOut を呼び出してください。
LayOut を呼び出した後、型情報を保存するには ICreateTypeLib::SaveAllChanges を使用します。ICreateTypeInfo インターフェイスの他のメンバーは、LayOut を呼び出した後に呼び出さないでください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICreateTypeInfo "{00020405-0000-0000-C000-000000000046}" #usecom global ICreateTypeInfo IID_ICreateTypeInfo "{}" #comfunc global ICreateTypeInfo_SetGuid 3 var #comfunc global ICreateTypeInfo_SetTypeFlags 4 int #comfunc global ICreateTypeInfo_SetDocString 5 wstr #comfunc global ICreateTypeInfo_SetHelpContext 6 int #comfunc global ICreateTypeInfo_SetVersion 7 int,int #comfunc global ICreateTypeInfo_AddRefTypeInfo 8 sptr,var #comfunc global ICreateTypeInfo_AddFuncDesc 9 int,var #comfunc global ICreateTypeInfo_AddImplType 10 int,int #comfunc global ICreateTypeInfo_SetImplTypeFlags 11 int,int #comfunc global ICreateTypeInfo_SetAlignment 12 int #comfunc global ICreateTypeInfo_SetSchema 13 wstr #comfunc global ICreateTypeInfo_AddVarDesc 14 int,var #comfunc global ICreateTypeInfo_SetFuncAndParamNames 15 int,var,int #comfunc global ICreateTypeInfo_SetVarName 16 int,wstr #comfunc global ICreateTypeInfo_SetTypeDescAlias 17 var #comfunc global ICreateTypeInfo_DefineFuncAsDllEntry 18 int,wstr,wstr #comfunc global ICreateTypeInfo_SetFuncDocString 19 int,wstr #comfunc global ICreateTypeInfo_SetVarDocString 20 int,wstr #comfunc global ICreateTypeInfo_SetFuncHelpContext 21 int,int #comfunc global ICreateTypeInfo_SetVarHelpContext 22 int,int #comfunc global ICreateTypeInfo_SetMops 23 int,wstr #comfunc global ICreateTypeInfo_SetTypeIdldesc 24 var #comfunc global ICreateTypeInfo_LayOut 25 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ICreateTypeInfo "{00020405-0000-0000-C000-000000000046}" #usecom global ICreateTypeInfo IID_ICreateTypeInfo "{}" #comfunc global ICreateTypeInfo_SetGuid 3 sptr #comfunc global ICreateTypeInfo_SetTypeFlags 4 int #comfunc global ICreateTypeInfo_SetDocString 5 wstr #comfunc global ICreateTypeInfo_SetHelpContext 6 int #comfunc global ICreateTypeInfo_SetVersion 7 int,int #comfunc global ICreateTypeInfo_AddRefTypeInfo 8 sptr,sptr #comfunc global ICreateTypeInfo_AddFuncDesc 9 int,sptr #comfunc global ICreateTypeInfo_AddImplType 10 int,int #comfunc global ICreateTypeInfo_SetImplTypeFlags 11 int,int #comfunc global ICreateTypeInfo_SetAlignment 12 int #comfunc global ICreateTypeInfo_SetSchema 13 wstr #comfunc global ICreateTypeInfo_AddVarDesc 14 int,sptr #comfunc global ICreateTypeInfo_SetFuncAndParamNames 15 int,sptr,int #comfunc global ICreateTypeInfo_SetVarName 16 int,wstr #comfunc global ICreateTypeInfo_SetTypeDescAlias 17 sptr #comfunc global ICreateTypeInfo_DefineFuncAsDllEntry 18 int,wstr,wstr #comfunc global ICreateTypeInfo_SetFuncDocString 19 int,wstr #comfunc global ICreateTypeInfo_SetVarDocString 20 int,wstr #comfunc global ICreateTypeInfo_SetFuncHelpContext 21 int,int #comfunc global ICreateTypeInfo_SetVarHelpContext 22 int,int #comfunc global ICreateTypeInfo_SetMops 23 int,wstr #comfunc global ICreateTypeInfo_SetTypeIdldesc 24 sptr #comfunc global ICreateTypeInfo_LayOut 25 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。