MsiViewGetErrorA 関数 (msiquery.h)
MsiViewGetError 関数は、MsiViewModify 関数で発生したエラーを返します。
構文
MSIDBERROR MsiViewGetErrorA(
[in] MSIHANDLE hView,
[out] LPSTR szColumnNameBuffer,
[in, out] LPDWORD pcchBuf
);
パラメーター
[in] hView
ビューへのハンドル。
[out] szColumnNameBuffer
null で終わる列名を受け取るバッファーへのポインター。 szColumnName に null (値=0) を渡してバッファーのサイズを決定しないでください。 バッファーのサイズを取得するには、空の文字列 (""など) を渡します。 その後、関数は MSIDBERROR_MOREDATAを返し、 pcchBuf には、終端の null 文字を含めずに、TCHAR に必要なバッファー サイズが含まれます。 MSIDBERROR_NOERRORが返された場合、 pcchBuf には、終端の null 文字を含めず、バッファーに書き込まれた TCHAR の数が含まれます。 エラーがない場合、このパラメーターは空の文字列です。
[in, out] pcchBuf
変数 szColumnNameBuffer が指すバッファーのサイズを TCHAR で指定する変数へのポインター。 関数がMSIDBERROR_NOERRORを返すと、この変数には 、szColumnNameBuffer にコピーされたデータのサイズが含まれます。終端の null 文字は含まれません。 szColumnNameBuffer が十分な大きさでない場合、関数は MSIDBERROR_MOREDATAを返し、pcchBuf が指す変数に、終端の null 文字を含まない必要なサイズを格納します。
戻り値
この関数は、次のいずれかの値を返します。
エラー コード | 意味 |
---|---|
|
引数が無効です。 |
|
バッファーが小さすぎてデータを受信できませんでした。 |
|
関数が失敗しました。 |
|
関数はエラーなしで正常に完了しました。 |
|
新しいレコードは、テーブル内の既存のレコードの主キーと重複します。 |
|
null 値は使用できません。または、列が削除されようとしていますが、別の行によって参照されています。 |
|
外部テーブル内の対応するレコードが見つかりませんでした。 |
|
データが許容される最大値を超えています。 |
|
データが許容される最小値より小さい。 |
|
データは、セットで許可されている値のメンバーではありません。 |
|
無効なバージョン文字列が指定されました。 |
|
このケースは無効です。 大文字または小文字をすべて大文字にする必要があります。 |
|
無効な GUID が指定されました。 |
|
無効なワイルドカード ファイル名が指定されたか、ワイルドカードの使用が無効でした。 |
|
無効な識別子が指定されました。 |
|
無効な言語 ID が指定されました。 |
|
無効なファイル名が指定されました。 |
|
無効なパスが指定されました。 |
|
無効な条件付きステートメントが指定されました。 |
|
無効な書式指定文字列が指定されました。 |
|
無効なテンプレート文字列が指定されました。 |
|
ディレクトリ テーブルの DefaultDir 列に無効な文字列が指定されました。 |
|
無効なレジストリ パス文字列が指定されました。 |
|
CustomAction テーブルの CustomSource 列に無効な文字列が指定されました。 |
|
無効なプロパティ文字列が指定されました。 |
|
_Validation テーブルに列への参照がありません。 |
|
列の _Validation テーブルの category 列が無効です。 |
|
無効なキャビネット名が指定されました。 |
|
_Validation テーブルの Keytable 列のテーブルが見つからないか、読み込まれていませんでした。 |
|
_Validation テーブルの MaxValue 列の値が MinValue 列の値より小さい。 |
|
無効なショートカット ターゲット名が指定されました。 |
|
文字列が、列定義で指定された長さに対して長すぎます。 |
|
無効なローカリゼーション属性が指定されました。 (主キーはローカライズできません。) |
メモリ不足の状況では、この関数によってSTATUS_NO_MEMORY例外が発生する可能性があることに注意してください。
解説
MsiViewModify がERROR_INVALID_DATAを返し、データが無効であることを示す場合にのみ、MsiViewGetError 関数を呼び出す必要があります。 エラーは、MSIMODIFY_VALIDATE、MSIMODIFY_VALIDATE_NEW、およびMSIMODIFY_VALIDATEFIELDに対してのみ記録されます。
ERROR_MORE_DATAが返された場合、ポインターである パラメーターは、文字列を保持するために必要なバッファーのサイズを指定します。 成功すると、文字列バッファーに書き込まれた文字数が返されます。 したがって、小さなバッファー (最小 1 文字) を渡し、関数がMSIDBERROR_MOREDATAを返すとき に pcchPathBuf で値を調べることで、バッファーの必要なサイズを取得できます。 pcchBuf によって参照される DWORD で、szColumnNameBuffer として null またはバッファー サイズ 0 を渡して、バッファーのサイズを判断しないでください。
MSIDBERROR_NOERRORが返されると、検証エラーは残らなくなります。 MSIDBERROR 戻り値は、 szColumnNameBuffer によって識別される列にある値に対して発生した検証エラーの種類を示します。
注意
msiquery.h ヘッダーは、MSIViewGetError をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
サポートされている最小のクライアント | Windows Server 2012、Windows 8、Windows Server 2008 R2、または Windows 7 の Windows インストーラー 5.0。 Windows Server 2008 または Windows Vista の Windows インストーラー 4.0 または Windows インストーラー 4.5。 Windows Server 2003 または Windows XP の Windows インストーラー |
対象プラットフォーム | Windows |
ヘッダー | msiquery.h |
Library | Msi.lib |
[DLL] | Msi.dll |