IDebugHostExtensibility::CreateFunctionAlias-Methode (dbgmodel.h)
Die CreateFunctionAlias-Methode erstellt einen "Funktionsalias", einen "Schnellalias" für eine Methode, die in einer Erweiterung implementiert ist. Die Bedeutung dieses Alias ist hostspezifisch. Es kann die Ausdrucksauswertung des Hosts um die -Funktion erweitern oder etwas ganz anderes ausführen.
Für Debugtools für Windows einen Funktionsalias:
Auf die Ausdrucksauswertung kann über das @$-Symbol zugegriffen werden. Ein unter someName registrierter Funktionsalias kann im Evaluator über @$someName(...) aufgerufen werden.
Kann über die ältere Bang-Syntax aufgerufen werden. Der Aufruf "!someName arg1, arg2, ..." entspricht semantisch dem Ausführen der (dx)-Ausdrucksauswertung mit "@$someName(arg1, arg2, ...)" und der Anzeige des Ergebnisses.
Syntax
HRESULT CreateFunctionAlias(
PCWSTR aliasName,
IModelObject *functionObject
);
Parameter
aliasName
Der (schnelle) Name des Alias, der erstellt/registriert wird.
functionObject
Eine Datenmodellmethode (eine in ein IModelObject geschachtelte IModelMethod), die die Funktionalität des Funktionsalias implementiert.
Rückgabewert
Diese Methode gibt HRESULT zurück, das den Erfolg oder Fehler angibt.
Hinweise
Beispielcode
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"
}
}
}
}
Anforderungen
Anforderung | Wert |
---|---|
Header | dbgmodel.h |