Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Метод Call — это способ вызова любого метода, определенного в модели данных. Вызывающий объект отвечает за передачу точного объекта экземпляра (этот указатель) и произвольного набора аргументов. Возвращается результат метода и любые необязательные метаданные, связанные с этим результатом. Методы, которые логически не возвращают значение, по-прежнему должны возвращать допустимый IModelObject. В таком случае IModelObject не является полем. В случае сбоя метода может возвращать необязательные расширенные сведения об ошибке в входном аргументе (даже если возвращенный HRESULT является сбоем). Очень важно, чтобы вызывающие проверяли это.
Базовый метод может предоставить собственную реализацию "разрешения перегрузки", выполняя различные действия на основе фактических типов или количества его входных аргументов. Модель данных не предоставляет такой помощи.
Синтаксис
HRESULT Call(
IModelObject *pContextObject,
ULONG64 argCount,
IModelObject **ppArguments,
_COM_Errorptr_ IModelObject **ppResult,
IKeyStore **ppMetadata
);
Параметры
pContextObject
Объект контекста (экземпляр этого указателя), из которого был получен метод.
argCount
Число аргументов, передаваемых вызову метода.
ppArguments
Массив объектов IModelObject по одному для каждого аргумента в вызове.
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 |