Freigeben über


IDebugHostExtensibility3::CreateFunctionAlias-Methode (dbgmodel.h)

Die CreateFunctionAlias-Methode erstellt einen "Funktionsalias", einen "Schnellalias" für eine in einer Erweiterung implementierte Methode. Die Bedeutung dieses Alias ist hostspezifisch. Er kann den Ausdrucksauswert des Hosts um die Funktion erweitern oder etwas ganz anderes tun.

Für Debuggingtools für Windows, ein Funktionsalias:

  • Der Zugriff auf den Ausdrucksauswert ist über das @$-Symbol möglich. Ein unter "someName" registrierter Funktionsalias kann über @$someName(...) im Evaluator aufgerufen werden.

  • Kann über die ältere Bangsyntax aufgerufen werden. Der Aufruf "!someName arg1, arg2, ..." ist semantisch gleichbedeutend mit dem Ausführen des (dx)-Ausdrucksauswerts mit "@$someName(arg1, arg2, ...)" und dem Anzeigen des Ergebnisses.

Syntax

HRESULT CreateFunctionAlias(
  PCWSTR       aliasName,
  IModelObject *functionObject
);

Parameter

aliasName

Der (schnelle) Name des alias, der erstellt/registriert wird.

functionObject

Eine Datenmodellmethode (eine IModelMethod in ein IModelObject) eingeboxt, das die Funktionalität des Funktionsalias implementiert.

Rückgabewert

Diese Methode gibt HRESULT zurück, das Erfolg oder Fehler angibt.

Bemerkungen

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

Siehe auch

IDebugHostExtensibility3-Schnittstelle