다음을 통해 공유


IDebugHostExtensibility::CreateFunctionAlias 메서드(dbgmodel.h)

CreateFunctionAlias 메서드는 일부 확장에서 구현된 메서드에 대한 "빠른 별칭"인 "함수 별칭"을 만듭니다. 이 별칭의 의미는 호스트에 따라 다릅니다. 호스트의 식 계산기를 함수로 확장하거나 완전히 다른 작업을 수행할 수 있습니다.

Windows용 디버깅 도구의 경우 함수 별칭:

  • @$ 기호를 통해 식 계산기에서 액세스할 수 있습니다. someName 아래에 등록된 함수 별칭은 @$someName(...)를 통해 계산기에서 호출할 수 있습니다.

  • 이전 bang 구문을 통해 호출할 수 있습니다. 호출 "!someName arg1, arg2, ..." 는 "@$someName(arg1, arg2, ...)"를 사용하여 (dx) 식 계산기를 실행하고 결과를 표시하는 것과 의미상 동일합니다.

구문

HRESULT CreateFunctionAlias(
  PCWSTR       aliasName,
  IModelObject *functionObject
);

매개 변수

aliasName

생성/등록할 별칭의 (빠른) 이름입니다.

functionObject

함수 별칭의 기능을 구현하는 데이터 모델 메서드(IModelObject에 박스된 IModelMethod)입니다.

반환 값

이 메서드는 성공 또는 실패를 나타내는 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 인터페이스