Partager via


IModelMethod ::Call, méthode (dbgmodel.h)

La méthode Call est la façon dont toute méthode définie dans le modèle de données est appelée. L’appelant est chargé de transmettre un objet instance précis (ce pointeur) et un ensemble arbitraire d’arguments. Le résultat de la méthode et toutes les métadonnées facultatives associées à ce résultat sont retournés. Les méthodes qui ne retournent pas logiquement une valeur doivent toujours retourner un IModelObject valide. Dans ce cas, l’IModelObject est une valeur non encadrée. En cas d’échec d’une méthode, elle peut retourner des informations d’erreur étendue facultatives dans l’argument d’entrée (même si le HRESULT retourné est un échec). Il est impératif que les appelants case activée pour cela.

Une méthode sous-jacente peut choisir de fournir sa propre implémentation de la « résolution de surcharge » en effectuant différentes actions en fonction des types réels ou de la quantité de ses arguments d’entrée. Le modèle de données n’offre aucune assistance pour cela.

Syntaxe

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

Paramètres

pContextObject

Objet de contexte (instance ce pointeur) à partir duquel la méthode a été extraite.

argCount

Nombre d’arguments passés à l’appel de méthode.

ppArguments

Tableau d’objets IModelObject , un pour chaque argument de l’appel.

ppResult

Valeur de retour de l’appel. Dans le cas où l’appel ne retourne sémantiquement rien, un objet sans valeur boxé est retourné. Si l’appel échoue (comme indiqué par un HRESULT défaillant), des informations d’erreur étendues facultatives peuvent être présentes ici.

ppMetadata

Les métadonnées facultatives relatives au résultat de l’appel peuvent être placées ici.

Valeur retournée

Cette méthode retourne HRESULT qui indique la réussite ou l’échec.

Remarques

Exemple de Code

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

Configuration requise

Condition requise Valeur
En-tête dbgmodel.h

Voir aussi

Interface IModelMethod