次の方法で共有


ILanguageExceptionTransform::GetTransformedRestrictedErrorInfo メソッド (restrictederrorinfo.h)

変換された制限付きエラー情報を取得します。

構文

HRESULT GetTransformedRestrictedErrorInfo(
  [out] IRestrictedErrorInfo **restrictedErrorInfo
);

パラメーター

[out] restrictedErrorInfo

制限付きエラー情報を含む IRestrictedErrorInfo オブジェクトへのポインター。

戻り値

このメソッドは、成功すると S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。

注釈

GetTransformedRestrictedErrorInfo は通常、例外からシステムのすべてのコンテキストに公開するために、言語プロジェクションによって実装されます。 具体的には、別の例外をキャッチする catch ハンドラーのコンテキストからスローされた例外から情報を公開します。 スローされた例外は、キャッチされた例外の "変換" と見なされます。これは、一部のプロジェクションでも内部例外と見なされます。 これにより、開発者は、変換前に元の例外が発生した理由に関する分析情報を取得できます。

実装すると、システムは GetTransformedRestrictedErrorInfo の呼び出しから取得した IRestrictedErrorInfo を使用して、IRestrictedErrorInfo オブジェクトのリンクされた別のリストを作成します。 これらのオブジェクトは、 CapturePropagationContext でキャプチャされた伝達に対する格納例外と共に、クラッシュ ダンプ内の格納例外として に公開されます。 他の例外と同様に、 GetPreviousLanguageExceptionErrorInfo を使用して、変換リスト内のこれらのオブジェクトを走査してアクセスできます。

[ 
    uuid(7974CD8B-A9EF-4CC4-9A7D-5793CCE30734), 
    pointer_default(unique), 
    object 
] 
interface IFooExceptionInfo : IUnknown 
{ 
    ... 
    HRESULT SetTranformedException(IFooException* exception); 
} 

class FooExceptionInfo : public Microsoft::WRL::RuntimeClass< 
    Microsoft::WRL::RuntimeClassFlags< 
    Microsoft::WRL::RuntimeClassType::ClassicCom>, 
    IFooExceptionInfo, 
    ILanguageExceptionTransform> 
{ 
    ... 
    ... 
private: 
    HRESULT _hr; 
    Microsoft::WRL::Wrappers::HString _message; 
    ComPtr<IFooException> _transformedException; 
public: 
    HRESULT SetTranformedException(IFooException* exception) 
    { 
        _transformedException = exception; 
        return S_OK; 
    } 

    HRESULT GetTransformedRestrictedErrorInfo(IRestrictedErrorInfo** restrictedErrorInfo) 
    { 
        return _transformedException->GetRestrictedErrorForException( 
                   restrictedErrorInfo); 
    } 
} 
[ 
    uuid(52394734-6600-4835-8E17-60BDEDB14B81), 
    pointer_default(unique), 
    object 
] 
interface IFooException : IUnknown 
{ 
    ... 
    HRESULT GetRestrictedErrorForException(IRestrictedErrorInfo** restrictedErrorInfo); 
    HRESULT GetExceptionInfo(IFooExceptionInfo** exceptionInfo); 
} 

class FooException : public Microsoft::WRL::RuntimeClass< 
    Microsoft::WRL::RuntimeClassFlags< 
    Microsoft::WRL::RuntimeClassType::ClassicCom>, 
    IFooException 
    ...> 
{ 
    ... 
    ... 
private: 
    ComPtr<IFooExceptionInfo> _exceptionInfo; 
    ComPtr<IRestrictedErrorInfo> _restrictedErrorInfo;  
public: 
    HRESULT GetRestrictedErrorForException(IRestrictedErrorInfo** restrictedErrorInfo) 
    { 
        return _restrictedErrorInfo.CopyTo(restrictedErrorInfo); 
    } 

    HRESULT GetExceptionInfo(IFooExceptionInfo** exceptionInfo) 
    { 
        return _exceptionInfo.CopyTo(exceptionInfo); 
    } 
} 
void OriginateErrorInfoForThrowWithCaughtException(IFooException* exception, IFooException* caughtException) 
{ 
    ComPtr<IFooExceptionInfo> exceptionInfo;     if(SUCCEEDED(exception->GetExceptionInfo(&exceptionInfo))) 
    { 
        exceptionInfo->SetTranformedException(caughtException); 
        exception->OriginateErrorInfoForThrow(); 
    } 
} 

要件

要件
サポートされている最小のクライアント Windows 10バージョン 1703 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2016 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー restrictederrorinfo.h

こちらもご覧ください

ILanguageExceptionTransform