共用方式為


IModelMethod::Call 方法 (dbgmodel.h)

Call 方法是叫用數據模型中任何方法的方法。 呼叫端負責傳遞精確的實例物件(此指標)和任意的自變數集。 傳回方法的結果和與該結果相關聯的任何選擇性元數據。 不以邏輯方式傳回值的方法仍必須傳回有效的 IModelObject。 在這種情況下,IModelObject 是 boxed no 值。 如果方法失敗,它可能會傳回輸入自變數中的選擇性擴充錯誤資訊(即使傳回的 HRESULT 失敗也一樣)。 呼叫端必須檢查此專案。

基礎方法可以選擇提供自己的「多載解析」實作,根據其輸入自變數的實際類型或數量來執行不同的動作。 數據模型不提供這類協助。

語法

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

參數

pContextObject

從中擷取方法的內容物件(實例此指標)。

argCount

傳遞至方法呼叫的自變數數目。

ppArguments

IModelObject 物件的數位,呼叫中每個自變數各一個。

ppResult

呼叫的傳回值。 如果呼叫語意上未傳回任何內容,則不會傳回 Boxed no value 物件。 如果呼叫失敗(如失敗的 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 介面