IModelMethod::Metode panggilan (dbgmodel.h)

Metode Panggilan adalah cara di mana metode apa pun yang ditentukan dalam model data dipanggil. Pemanggil bertanggung jawab untuk meneruskan objek instans yang akurat (penunjuk ini) dan sekumpulan argumen arbitrer. Hasil metode dan metadata opsional apa pun yang terkait dengan hasil tersebut dikembalikan. Metode yang tidak secara logis mengembalikan nilai masih harus mengembalikan IModelObject yang valid. Dalam kasus seperti itu, IModelObject adalah nilai tanpa kotak. Jika metode gagal, metode dapat mengembalikan informasi kesalahan opsional yang diperluas dalam argumen input (bahkan jika HRESULT yang dikembalikan gagal). Sangat penting bahwa penelepon memeriksa hal ini.

Metode yang mendasar dapat memilih untuk memberikan implementasi "resolusi kelebihan beban" sendiri yang melakukan tindakan yang berbeda berdasarkan jenis atau kuantitas aktual argumen inputnya. Model data tidak memberikan bantuan untuk hal tersebut.

Sintaks

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

Parameter

pContextObject

Objek konteks (instans penunjuk ini) dari mana metode diambil.

argCount

Jumlah argumen yang diteruskan ke panggilan metode.

ppArguments

Array objek IModelObject , satu untuk setiap argumen dalam panggilan.

ppResult

Nilai pengembalian panggilan. Jika panggilan secara semantik tidak mengembalikan apa pun, objek tanpa nilai dalam kotak akan dikembalikan. Jika panggilan gagal (seperti yang ditunjukkan oleh HRESULT yang gagal), informasi kesalahan opsional yang diperluas mungkin ada di sini.

ppMetadata

Metadata opsional tentang hasil panggilan dapat ditempatkan di sini.

Mengembalikan nilai

Metode ini mengembalikan HRESULT yang menunjukkan keberhasilan atau kegagalan.

Keterangan

Kode Sampel

// 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;
    }
};

Persyaratan

Persyaratan Nilai
Header dbgmodel.h

Lihat juga

Antarmuka IModelMethod