IMsmError
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IMsmError インターフェースは、単一のマージエラーに関する詳細を取得します。
メソッド 7
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
get_Type メソッドは、Error オブジェクトの Type プロパティを取得します。このメソッドは、このオブジェクトが表すエラーの種類を示す msmErrorType 値を返します。
| ErrorType | msmErrorType* | inout | エラーの種類を受け取るメモリ上の場所へのポインター。
|
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 値 | 意味 |
|---|---|
| ErrorType が Null です。 | |
| 関数は成功しました。 |
get_Path メソッドは、Error オブジェクトの Path プロパティを取得します。
| ErrorPath | LPWSTR* | inout | BSTR 値が格納されるメモリ上の場所へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 値 | 意味 |
|---|---|
| Path が null です。 | |
| システムは文字列用のメモリを割り当てることができませんでした。 | |
| 関数は成功しました。 |
解説(Remarks)
クライアントは、SysFreeString を使用して結果の文字列を解放する責任があります。
Windows Installer バージョン 1.0 および 1.1 では、 get_Path は常に空の文字列を返します。将来のバージョンのクラスでは、この関数を使用して、作成できなかったファイルまたはディレクトリのパスを返すことがあります。この値は、msmErrorFileCreate または msmErrorDirCreate の種類のエラーに対してのみ有効です。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。
get_Language メソッドは、Error オブジェクトの Language プロパティを取得します。この関数は、エラーの LANGID を返します。
| ErrorLanguage | SHORT* | inout | このエラーの原因となった言語の値を受け取るメモリ上の場所へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 値 | 意味 |
|---|---|
| Language が null です。 | |
| 関数は成功しました。 |
解説(Remarks)
エラーが msmErrorLanguageUnsupported または msmErrorLanguageFailed の種類でない限り、この関数は -1 を返します。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。
get_DatabaseTable メソッドは、Error オブジェクトの DatabaseTable プロパティを取得します。このメソッドは、エラーの原因となったデータベース内のテーブルの名前を返します。
| ErrorTable | LPWSTR* | inout | BSTR 値が格納されるメモリ上の場所へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 値 | 意味 |
|---|---|
| Table が null です。 | |
| システムは文字列用のメモリを割り当てることができませんでした。 | |
| 関数は成功しました。 |
解説(Remarks)
クライアントは、SysFreeString を使用して結果の文字列を解放する責任があります。
値がエラーの種類に該当しない場合、コレクションは空になります。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。
get_DatabaseKeys メソッドは、Error オブジェクトの DatabaseKeys プロパティを取得します。このメソッドは、エラーの原因となったデータベース内の行のプライマリキーを含む文字列コレクションへのポインターを返します。キーはコレクションの各エントリに 1 つずつ格納されます。
| ErrorKeys | IMsmStrings** | out | 文字列コレクションへのポインターを受け取るメモリ上の場所へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 値 | 意味 |
|---|---|
| ErrorKeys が null です。 | |
| 関数は成功しました。 |
解説(Remarks)
クライアントは、文字列コレクションが不要になったときにそれを解放する責任があります。
値がエラーの種類に該当しない場合、コレクションは空になります。エラーの種類は、IMsmError::get_Type を使用して判別できます。
get_ModuleTable メソッドは、Error オブジェクトの ModuleTable プロパティを取得します。このメソッドは、エラーの原因となったモジュール内のテーブルの名前を返します。
| ErrorTable | LPWSTR* | inout | BSTR 値が格納されるメモリ上の場所へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 値 | 意味 |
|---|---|
| Table が null です。 | |
| システムは文字列用のメモリを割り当てることができませんでした。 | |
| 関数は成功しました。 |
解説(Remarks)
クライアントは、SysFreeString を使用して結果の文字列を解放する責任があります。
値がエラーの種類に該当しない場合、コレクションは空になります。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。
get_ModuleKeys メソッドは、Error オブジェクトの ModuleKeys プロパティを取得します。このメソッドは、エラーの原因となったモジュール内の行のプライマリキーを含む文字列コレクションへのポインターを返します。キーはコレクションの各エントリに 1 つずつ格納されます。
| ErrorKeys | IMsmStrings** | out | 文字列コレクションへのポインターを受け取るメモリ上の場所へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 値 | 意味 |
|---|---|
| ErrorKeys が null です。 | |
| 関数は成功しました。 |
解説(Remarks)
クライアントは、文字列コレクションが不要になったときにそれを解放する責任があります。
値がエラーの種類に該当しない場合、コレクションは空になります。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMsmError "{0ADDA828-2C26-11D2-AD65-00A0C9AF11A6}" #usecom global IMsmError IID_IMsmError "{}" #comfunc global IMsmError_get_Type 7 var #comfunc global IMsmError_get_Path 8 var #comfunc global IMsmError_get_Language 9 var #comfunc global IMsmError_get_DatabaseTable 10 var #comfunc global IMsmError_get_DatabaseKeys 11 sptr #comfunc global IMsmError_get_ModuleTable 12 var #comfunc global IMsmError_get_ModuleKeys 13 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IMsmError "{0ADDA828-2C26-11D2-AD65-00A0C9AF11A6}" #usecom global IMsmError IID_IMsmError "{}" #comfunc global IMsmError_get_Type 7 sptr #comfunc global IMsmError_get_Path 8 sptr #comfunc global IMsmError_get_Language 9 sptr #comfunc global IMsmError_get_DatabaseTable 10 sptr #comfunc global IMsmError_get_DatabaseKeys 11 sptr #comfunc global IMsmError_get_ModuleTable 12 sptr #comfunc global IMsmError_get_ModuleKeys 13 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。