次の方法で共有


IModelMethod::Call メソッド (dbgmodel.h)

Call メソッドは、データ モデルで定義されているすべてのメソッドを呼び出す方法です。 呼び出し元は、正確なインスタンス オブジェクト (このポインター) と任意の引数のセットを渡す役割を担います。 メソッドの結果と、その結果に関連付けられている任意のメタデータが返されます。 値を論理的に返さないメソッドは、IModelObject 有効な値を返す必要があります。 このような場合、IModelObject はボックス化された値がありません。 メソッドが失敗した場合、オプションの拡張エラー情報が入力引数に返されることがあります (返された HRESULT が失敗した場合でも)。 呼び出し元がこれをチェックすることが不可欠です。

基になるメソッドは、入力引数の実際の型または量に基づいて異なるアクションを実行する "オーバーロード解決" の独自の実装を提供することを選択できます。 データ モデルでは、このようなサポートは提供されません。

構文

HRESULT Call(
  IModelObject                *pContextObject,
  ULONG64                     argCount,
  IModelObject                **ppArguments,
  _COM_Errorptr_ IModelObject **ppResult,
  IKeyStore                   **ppMetadata
);

パラメーター

pContextObject

メソッドがフェッチされたコンテキスト オブジェクト (このポインターのインスタンス)。

argCount

メソッド呼び出しに渡される引数の数。

ppArguments

IModelObject オブジェクトの配列。呼び出しの引数ごとに 1 つ。

ppResult

呼び出しの戻り値。 呼び出しが意味的に何も返さない場合、ボックス化された値オブジェクトは返されません。 呼び出しが失敗した場合 (失敗した HRESULT で示されているように)、オプションの拡張エラー情報がここに存在する可能性があります。

ppMetadata

呼び出し結果に関する省略可能なメタデータをここに配置できます。

戻り値

このメソッドは、成功または失敗を示す HRESULT を返します。

備考

サンプル コード

// The full implementation class is shown for clarity.  This is a method which sums up all integers passed to it.
class MySummationMethod :
    public Microsoft::WRL::RuntimeClass<
        Microsoft::WRL::RuntimeClassFlags<
            Microsoft::WRL::RuntimeClassType::ClassicCom
            >,
        IModelMethod
        >
{
public:

    // The method is 'static'.  Ignore pContextObject.
    IFACEMETHOD(Call)(_In_ IModelObject * /*pContextObject*/, 
                      _In_ ULONG64 argCount, 
                      _In_reads_(argCount) IModelObject **ppArguments, 
                      _COM_Errorptr_ IModelObject **ppResult,
                      _COM_Outptr_opt_result_maybenull_ IKeyStore **ppMetadata)
    {
        HRESULT hr = S_OK;
        *ppResult = nullptr;
        if (ppMetadata != nullptr)
        {
             *ppMetadata = nullptr;
        }

        if (argCount == 0)
        {
            // Example of a specific error message.
            GetManager()->CreateErrorObject(
                E_INVALIDARG, 
                L"At least one argument must be passed to the Sum() method", 
                ppResult);
            return E_INVALIDARG;
        }

        int sum = 0;
        for (ULONG64 i = 0; i < argCount; ++i)
        {
            VARIANT vtValue;
            hr = ppArguments[i]->GetIntrinsicValueAs(VT_I4, &vtValue);
            if (FAILED(hr))
            {
                // If we couldn't unbox as I4, someone passed an invalid argument.
                // As an example, be specific.
                GetManager()->CreateErrorObject(
                    E_INVALIDARG, 
                    L"All arguments passed to the Sum() method must be integers", 
                    ppResult);
                return E_INVALIDARG;
            }

            sum += vtValue.lVal;
        }

        VARIANT vtSum;
        vtSum.vt = VT_I4;
        vtSum.lVal = sum;

        ComPtr<IModelObject> spSum;
        hr = GetManager()->CreateIntrinsicObject(ObjectIntrinsic, &vtSum, &spSum);
        if (SUCCEEDED(hr))
        {
            *ppResult = spSum.Detach();
        }
        return hr;
    }
};

必要条件

要件 価値
ヘッダー dbgmodel.h

関連項目

IModelMethod インターフェイス