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

IMsmError

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IID0adda828-2c26-11d2-ad65-00a0c9af11a6継承元IDispatch呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl7

公式ドキュメント

IMsmError インターフェースは、単一のマージエラーに関する詳細を取得します。

メソッド 7

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 7 HRESULT get_Type(msmErrorType* ErrorType)

get_Type メソッドは、Error オブジェクトの Type プロパティを取得します。このメソッドは、このオブジェクトが表すエラーの種類を示す msmErrorType 値を返します。

ErrorTypemsmErrorType*inout

エラーの種類を受け取るメモリ上の場所へのポインター。

msmErrorType 説明
msmErrorLanguageUnsupported 1 モジュールがサポートしていない言語でモジュールを開く要求が行われました。モジュールはこれ以上の汎用的な言語をサポートしていません。 Type プロパティに msmErrorLanguageUnsupported を追加し、要求された言語を Language プロパティ (Error オブジェクト) に追加します。Error オブジェクトのすべてのプロパティは空です。 OpenModule 関数は ERROR_INSTALL_LANGUAGE_UNSUPPORTED (HRESULT として) を返します。
msmErrorLanguageFailed 2 サポートされている言語でモジュールを開く要求が行われましたが、モジュールに無効な言語トランスフォームが含まれています。Type プロパティに msmErrorLanguageFailed を追加し、Error オブジェクトの Language プロパティに、適用されたトランスフォームの言語を追加します。より汎用的な言語が使用された場合、これは要求された言語ではない可能性があります。Error オブジェクトのその他のすべてのプロパティは空です。 OpenModule 関数は ERROR_INSTALL_LANGUAGE_UNSUPPORTED (HRESULT として) を返します。
msmErrorExclusion 3 モジュールが、データベース内の別のモジュールを除外するか、または別のモジュールによって除外されるため、マージできません。Error オブジェクトの Type プロパティに msmErrorExclusion を追加します。 ModuleKeys プロパティまたは DatabaseKeys プロパティには、 ModuleExclusion テーブル内の除外されたモジュールの行のプライマリキーが格納されます。既存のモジュールがマージ対象のモジュールを除外する場合、除外されたモジュールの ModuleSignature 情報が ModuleKeys に追加されます。マージ対象のモジュールが既存のモジュールを除外する場合、DatabaseKeys に除外されたモジュールの ModuleSignature 情報が格納されます。その他のすべてのプロパティは空 (または -1) です。
msmErrorTableMerge 4 マージ中のマージ競合です。 Type プロパティの値は msmErrorTableMerge に設定されます。 DatabaseTable プロパティDatabaseKeys プロパティには、データベース内の競合する行のテーブル名とプライマリキーが格納されます。 ModuleTable プロパティModuleKeys プロパティには、モジュール内の競合する行のテーブル名とプライマリキーが格納されます。データベースに行が存在しない場合、ModuleTable と ModuleKeys のエントリは null になることがあります。たとえば、競合が生成された FeatureComponents テーブルのエントリにある場合です。 構成可能なマージモジュールをマージする場合、構成によってこれらのプロパティがモジュールに存在しない行を参照することがあります。
msmErrorResequenceMerge 5 必要なマージ済みアクションを含めるためにシーケンステーブルを再シーケンスする際に問題が発生しました。 Type プロパティは msmErrorResequenceMerge に設定されます。DatabaseTable プロパティと DatabaseKeys プロパティには、競合する行のシーケンステーブル名とプライマリキー (アクション名) が格納されます。ModuleTable プロパティと ModuleKeys プロパティには、競合する行のシーケンステーブル名とプライマリキー (アクション名) が格納されます。構成可能なマージモジュールをマージする場合、構成によってこれらのプロパティがモジュールに存在しない行を参照することがあります。
msmErrorFileCreate 6 使用されません。
msmErrorDirCreate 7 ファイルをディスクに展開するためのディレクトリの作成中に問題が発生しました。 Path プロパティには、作成できなかったディレクトリが格納されます。その他のすべてのプロパティは空または -1 です。
msmErrorFeatureRequired 8 マージを完了するには機能名が必要ですが、機能名が指定されていません。 Type プロパティは msmErrorFeatureRequired に設定されます。DatabaseTable と DatabaseKeys には、競合する行のテーブル名とプライマリキーが格納されます。ModuleTable プロパティと ModuleKeys プロパティには、マージできない行のテーブル名とプライマリキーが格納されます。構成可能なマージモジュールをマージする場合、構成によってこれらのプロパティがモジュールに存在しない行を参照することがあります。失敗が生成された FeatureComponents テーブルで発生した場合、DatabaseTable プロパティと DatabaseKeys プロパティは空になり、ModuleTable プロパティと ModuleKeys プロパティは、失敗の原因となった Component テーブル内の行を参照します。
msmErrorBadNullSubstitution 9 NULL 値を許容しない列への Null 値の代入です。これにより、 Type プロパティに msmErrorBadNullSubstitution が入力され、 ModuleTable プロパティと ModuleKeys プロパティに、「ModuleSubstitution」およびこの行に対する ModuleSubstitution テーブルのキーが入力されます。 Error オブジェクトのその他のすべてのプロパティは、空の文字列または -1 に設定されます。

このエラーはマージの即時失敗を引き起こし、 MergeEx 関数E_FAIL を返す原因となります。

msmErrorBadSubstitutionType 10 Text Format Type または Integer Format TypeBinary Type データ列への代入です。この種類のエラーは、 Type プロパティに msmErrorBadSubstitutionType を返し、 ModuleTable プロパティに、「ModuleSubstitution」およびこの行に対する ModuleSubstitution テーブルのキーを入力します。 Error オブジェクトのその他のすべてのプロパティは、空の文字列または -1 に設定されます。

このエラーはマージの即時失敗を引き起こし、 MergeEx 関数E_FAIL を返す原因となります。

msmErrorMissingConfigItem 11 ModuleSubstitution テーブル内の行が、 ModuleConfiguration テーブルで定義されていない構成項目を参照しています。この種類のエラーは、 Type プロパティに msmErrorMissingConfigItem を返し、 ModuleTable プロパティに、「ModuleSubstitution」およびこの行に対する ModuleSubstitution テーブルのキーを入力します。Error オブジェクトのその他のすべてのプロパティは、空の文字列または -1 に設定されます。

このエラーはマージの即時失敗を引き起こし、 MergeEx 関数E_FAIL を返す原因となります。

msmErrorBadNullResponse 12 オーサリングツールが、msmConfigItemNonNullable 属性が付いた項目に対して Null 値を返しました。この種類のエラーは、 Type プロパティに msmErrorBadNullResponse を返し、 ModuleTable プロパティに、その項目に対する「ModuleSubstitution」および ModuleSubstitution テーブルのキーを入力します。 Error オブジェクトのその他のすべてのプロパティは、空の文字列または -1 に設定されます。

このエラーはマージの即時失敗を引き起こし、 MergeEx 関数E_FAIL を返す原因となります。

msmErrorDataRequestFailed 13 データを要求されたときに、オーサリングツールが失敗コード (S_OK または S_FALSE 以外) を返しました。この種類のエラーは、 Type プロパティに msmErrorDataRequestFailed を返し、 ModuleTable プロパティに、その項目に対する「ModuleSubstitution」および ModuleSubstitution テーブルのキーを入力します。 Error オブジェクトのその他のすべてのプロパティは、空の文字列または -1 に設定されます。

このエラーはマージの即時失敗を引き起こし、 MergeEx 関数E_FAIL を返す原因となります。

msmErrorPlatformMismatch 14 64 ビットモジュールを 64 ビットパッケージではないパッケージにマージしようとしたことを示します。この種類のエラーは、 Type プロパティに msmErrorPlatformMismatch を返します。エラーオブジェクトのその他のすべてのプロパティは、空の文字列または -1 に設定されます。このエラーはマージの即時失敗を引き起こし、 Merge 関数または MergeEx 関数が E_FAIL を返す原因となります。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

意味
E_INVALIDARG
ErrorType が Null です。
S_OK
関数は成功しました。
vtbl 8 HRESULT get_Path(LPWSTR* ErrorPath)

get_Path メソッドは、Error オブジェクトの Path プロパティを取得します。

ErrorPathLPWSTR*inoutBSTR 値が格納されるメモリ上の場所へのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

意味
E_INVALIDARG
Path が null です。
E_OUTOFMEMORY
システムは文字列用のメモリを割り当てることができませんでした。
S_OK
関数は成功しました。

解説(Remarks)

クライアントは、SysFreeString を使用して結果の文字列を解放する責任があります。

Windows Installer バージョン 1.0 および 1.1 では、 get_Path は常に空の文字列を返します。将来のバージョンのクラスでは、この関数を使用して、作成できなかったファイルまたはディレクトリのパスを返すことがあります。この値は、msmErrorFileCreate または msmErrorDirCreate の種類のエラーに対してのみ有効です。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。

vtbl 9 HRESULT get_Language(SHORT* ErrorLanguage)

get_Language メソッドは、Error オブジェクトの Language プロパティを取得します。この関数は、エラーの LANGID を返します。

ErrorLanguageSHORT*inoutこのエラーの原因となった言語の値を受け取るメモリ上の場所へのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

意味
E_INVALIDARG
Language が null です。
S_OK
関数は成功しました。

解説(Remarks)

エラーが msmErrorLanguageUnsupported または msmErrorLanguageFailed の種類でない限り、この関数は -1 を返します。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。

vtbl 10 HRESULT get_DatabaseTable(LPWSTR* ErrorTable)

get_DatabaseTable メソッドは、Error オブジェクトの DatabaseTable プロパティを取得します。このメソッドは、エラーの原因となったデータベース内のテーブルの名前を返します。

ErrorTableLPWSTR*inoutBSTR 値が格納されるメモリ上の場所へのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

意味
E_INVALIDARG
Table が null です。
E_OUTOFMEMORY
システムは文字列用のメモリを割り当てることができませんでした。
S_OK
関数は成功しました。

解説(Remarks)

クライアントは、SysFreeString を使用して結果の文字列を解放する責任があります。

値がエラーの種類に該当しない場合、コレクションは空になります。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。

vtbl 11 HRESULT get_DatabaseKeys(IMsmStrings** ErrorKeys)

get_DatabaseKeys メソッドは、Error オブジェクトの DatabaseKeys プロパティを取得します。このメソッドは、エラーの原因となったデータベース内の行のプライマリキーを含む文字列コレクションへのポインターを返します。キーはコレクションの各エントリに 1 つずつ格納されます。

ErrorKeysIMsmStrings**out文字列コレクションへのポインターを受け取るメモリ上の場所へのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

意味
E_INVALIDARG
ErrorKeys が null です。
S_OK
関数は成功しました。

解説(Remarks)

クライアントは、文字列コレクションが不要になったときにそれを解放する責任があります。

値がエラーの種類に該当しない場合、コレクションは空になります。エラーの種類は、IMsmError::get_Type を使用して判別できます。

vtbl 12 HRESULT get_ModuleTable(LPWSTR* ErrorTable)

get_ModuleTable メソッドは、Error オブジェクトの ModuleTable プロパティを取得します。このメソッドは、エラーの原因となったモジュール内のテーブルの名前を返します。

ErrorTableLPWSTR*inoutBSTR 値が格納されるメモリ上の場所へのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

意味
E_INVALIDARG
Table が null です。
E_OUTOFMEMORY
システムは文字列用のメモリを割り当てることができませんでした。
S_OK
関数は成功しました。

解説(Remarks)

クライアントは、SysFreeString を使用して結果の文字列を解放する責任があります。

値がエラーの種類に該当しない場合、コレクションは空になります。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。

vtbl 13 HRESULT get_ModuleKeys(IMsmStrings** ErrorKeys)

get_ModuleKeys メソッドは、Error オブジェクトの ModuleKeys プロパティを取得します。このメソッドは、エラーの原因となったモジュール内の行のプライマリキーを含む文字列コレクションへのポインターを返します。キーはコレクションの各エントリに 1 つずつ格納されます。

ErrorKeysIMsmStrings**out文字列コレクションへのポインターを受け取るメモリ上の場所へのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことがあります。

意味
E_INVALIDARG
ErrorKeys が null です。
S_OK
関数は成功しました。

解説(Remarks)

クライアントは、文字列コレクションが不要になったときにそれを解放する責任があります。

値がエラーの種類に該当しない場合、コレクションは空になります。エラーの種類は、IMsmError::get_Type を呼び出すことで判別できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 不要)。