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 |