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 |