IDebugProperty3::SetValueAsStringWithError
이 속성의 값을 설정 하 고 필요에 따라 오류 메시지를 반환 합니다.
HRESULT SetValueAsStringWithError(
LPCOLESTR pszValue,
DWORD dwRadix,
DWORD dwTimeout,
BSTR* errorString
);
int SetValueAsStringWithError(
string pszValue,
uint dwRadix,
uint dwTimeout,
out string errorString
);
매개 변수
pszValue
[in] 설정할 값입니다.dwRadix
[in] 기 수 설정 되는 값입니다.dwTimeout
[in] 값 설정 하 고 대기 하는 시간 (INFINITE 방법을 기다리는 영원히).errorString
[out] 값을 설정할 때 오류가 발생 했습니다 경우 실패의 원인을 저장 합니다.
반환 값
성공 하면 반환 S_OK. 그렇지 않으면 오류 코드를 반환 합니다.
설명
들어오는 값 식이 계산 될 수 있습니다.
예제
다음 예제에서는이 메서드를 구현 하는 방법을 보여 줍니다 있는 CProperty 를 노출 하는 개체는 IDebugProperty3 인터페이스.
HRESULT CProperty::SetValueAsStringWithError(
LPCOLESTR in_szValue,
DWORD in_RADIX,
DWORD in_TIMEOUT,
BSTR * out_ERRORTEXT
)
{
// precondition
REQUIRE( NULL != in_szValue );
if (NULL == in_szValue)
return E_INVALIDARG;
INVARIANT( this );
if (!this->ClassInvariant())
return E_UNEXPECTED;
if (NULL == m_pPropertyContext->m_pCEE->m_LanguageSpecificUseCases.pfSetValue)
return S_OK;
// function body
DEBUG_PROPERTY_INFO dpInfo,dpInfo2;
HRESULT HR = this->GetPropertyInfo(DEBUGPROP_INFO_FULLNAME | DEBUGPROP_INFO_ATTRIB | DEBUGPROP_INFO_TYPE | DEBUGPROP_INFO_VALUE_AUTOEXPAND,
in_RADIX,
in_TIMEOUT,
NULL,
0,
&dpInfo);
if (ENSURE( S_OK == HR ))
{
REQUIRE( NULL != dpInfo.bstrFullName );
REQUIRE( NULL != dpInfo.bstrType );
REQUIRE( NULL == dpInfo.bstrName );
REQUIRE( NULL == dpInfo.bstrValue );
REQUIRE( NULL == dpInfo.pProperty );
BSTR bstrError = NULL;
UINT ichError = 0;
IDebugProperty2* pProperty = NULL;
IDebugParsedExpression* pParsedExpression = NULL;
CComBSTR bstrValue = dpInfo.bstrFullName;
bstrValue += L" = ";
bstrValue += in_szValue;
HR = this->m_pPropertyContext->m_pCEE->
Parse(bstrValue, 0, in_RADIX, &bstrError, &ichError, &pParsedExpression);
if (S_OK == HR)
{
REQUIRE( NULL == bstrError );
HR = pParsedExpression->EvaluateSync(EVAL_NOEVENTS | EVAL_RETURNVALUE,
in_TIMEOUT,
m_pPropertyContext->m_pSymbolProvider,
m_pPropertyContext->m_pAddress,
m_pPropertyContext->m_pBinder,
NULL,
&pProperty);
dpInfo2.dwAttrib = DBG_ATTRIB_VALUE_ERROR;
if (pProperty)
{
pProperty->GetPropertyInfo(DEBUGPROP_INFO_ATTRIB | DEBUGPROP_INFO_VALUE,10,in_TIMEOUT,NULL,0,&dpInfo2);
}
if (DBG_ATTRIB_VALUE_ERROR & dpInfo2.dwAttrib)
{
HR = E_FAIL;
bstrError = dpInfo2.bstrValue;
}
else
{
::SysFreeString(dpInfo.bstrValue);
}
EXTERNAL_RELEASE(pProperty);
EXTERNAL_RELEASE(pParsedExpression);
}
if (bstrError)
{
if(out_ERRORTEXT)
{
*out_ERRORTEXT = bstrError;
bstrError = NULL;
}
else
{
::SysFreeString(bstrError);
}
}
::SysFreeString(dpInfo.bstrFullName);
::SysFreeString(dpInfo.bstrType);
}
// postcondition
INVARIANT( this );
return HR;
}