COMインターフェイスメソッドはHRESULT
、渡された無効な引数値を通知するためにさまざまな値を返すことができます。E_POINTER
いつ戻るのE_INVALIDARG
ですか?
私が理解しているように、メソッドがカプセル化されたコレクションのインデックスを受け取り、それが範囲外であるかどうかE_INVALIDARG
。Interface**
メソッドが、新しく作成されたオブジェクトへのポインタを格納することを目的としたポインタを受け取った場合E_POINTER
。
HRESULT CImpl::GetItem( long index; Interface** result )
{
if( result == 0 ) {
return E_POINTER;
}
if( index < 0 || index >= internalArray.size() ) {
return E_INVALIDARG;
}
*result = CreateWrapperObject( internalArray[index] );
return S_OK;
}
WCHAR*
しかし、「in」パラメーターとしてファイル名を持つバッファーを受け取り、これWCHAR*
がnullの場合はどうなるでしょうか。これE_POINTER
ですかE_INVALIDARG
?
または、メソッドが構造体へのポインターを受け取り、そのポインターを介して構造体を埋めることが期待され、このポインターがnullである-これE_POINTER
またはE_INVALIDARG
?
HRESULT CImpl::SaveToFile( WCHAR* fileName )
{
if( fileName == 0 ) {
return // what to return here?
}
//... do actual work here
}
HRESULT CImpl::GetAttributes( Attributes* to )
{
if( to == 0 ) {
return // what to return here?
}
attributes->IsCool = getIsCool();
attributes->Color = RGB( 0, 255, 0 );
return S_OK;
}
いつ戻るかE_POINTER
、いつE_INVALIDARG
ポインタ型パラメータをチェックするかについての規則は何ですか?