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 no value 物件。 如果呼叫失敗 (,如失敗的 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 |