IDebugHostExtensibility::CreateFunctionAlias メソッド (dbgmodel.h)
CreateFunctionAlias メソッドは、一部の拡張機能で実装されるメソッドの "クイック エイリアス" である "関数エイリアス" を作成します。 このエイリアスの意味はホスト固有です。 関数を使用してホストの式エバリュエーターを拡張したり、まったく異なる処理を行ったりすることがあります。
Debugging Tools for Windows の場合、関数のエイリアス:
@$ 記号を使用して式エバリュエーターでアクセスできます。 someName に登録されている関数エイリアスは、@$someName(...) を介してエバリュエーターで呼び出し可能です。
以前の bang 構文を使用して呼び出すことができます。 呼び出し "!someName arg1, arg2, ..."は意味的には、"@$someName(arg1, arg2, ...)" を使用して (dx) 式エバリュエーターを実行し、結果を表示することと同じです。
構文
HRESULT CreateFunctionAlias(
PCWSTR aliasName,
IModelObject *functionObject
);
パラメーター
aliasName
作成/登録されているエイリアスの (クイック) 名。
functionObject
関数エイリアスの機能を実装するデータ モデル メソッド (IModelMethodIModelObjectにボックス化されます)。
戻り値
このメソッドは、成功または失敗を示す HRESULT を返します。
備考
サンプル コード の
class MySumFunction:
public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<
Microsoft::WRL::RuntimeClassType::ClassicCom
>,
IModelMethod
>
{
public:
IFACEMETHOD(Call)(_In_ IModelObject * /*pContextObject*/,
_In_ ULONG64 argCount,
_In_reads_(argCount) IModelObject **ppArguments,
_COM_Errorptr_ **ppResult)
{
HRESULT hr = S_OK;
*ppResult = nullptr;
if (argCount == 0)
{
return E_INVALIDARG;
}
int sum = 0;
for (ULONG64 i = 0; i < argCount; ++i)
{
VARIANT vtValue;
if (FAILED(ppArguments[i]->GetIntrinsicValueAs(&vtValue)))
{
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;
}
};
// Create a method object and register it as a function alias.
ComPtr<MySumFunction> spSumFunc = Microsoft::WRL::Make<MySumFunction>();
if (spSumFunc != nullptr)
{
VARIANT vtMethod;
vtMethod.vt = VT_UNKNOWN;
vtMethod.punkVal = static_cast<IModelMethod *>(spSumFunc.Get());
ComPtr<IModelObject> spMethodObject;
if (SUCCEEDED(GetManager()->CreateIntrinsicObject(ObjectMethod,
&vtMethod,
&spMethodObject)))
{
ComPtr<IDebugHostExtensibility> spHostExtensibility;
if (SUCCEEDED(GetHost()->QueryInterface(IID_PPV_ARGS(&spHostExtensibility)))
{
if (SUCCEEDED(spHostExtensibility->CreateFunctionAlias(
L"sumit",
spMethodObject.Get())))
{
// sumit is now an alias for our function. The meaning here
// is host specific. For DbgEng, it means you can do things
// like "dx @$sumit(5, 7, 8)" or "!sumit 5, 7, 8"
}
}
}
}
必要条件
要件 | 価値 |
---|---|
ヘッダー | dbgmodel.h |
関連項目
IDebugHostExtensibility インターフェイス の