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 값 개체가 반환되지 않습니다. 호출이 실패하는 경우(실패한 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 |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기