Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Legt den Wert dieser Eigenschaft fest und gibt bei Bedarf eine Fehlermeldung zurück.
Syntax
int SetValueAsStringWithError(
string pszValue,
uint dwRadix,
uint dwTimeout,
out string errorString
);
Parameter
pszValue
[in] Festzulegende Wert.
dwRadix
[in] Das Radix des festzulegenden Werts.
dwTimeout
[in] Die Dauer der Wartezeit, bis der Wert festgelegt wird (INFINITE bedeutet für immer warten).
errorString
[out] Wenn beim Festlegen des Werts ein Fehler aufgetreten ist, enthält dies den Grund für den Fehler.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK, andernfalls ein Fehlercode zurückgegeben.
Hinweise
Der eingehende Wert könnte ein Ausdruck sein, der ausgewertet werden soll.
Beispiel
Das folgende Beispiel zeigt, wie Sie diese Methode für ein CProperty-Objekt implementieren, das die IDebugProperty3-Schnittstelle verfügbar macht.
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;
}