IDebugExpressionContext2::ParseText
Analysiert einen Ausdruck in Form der Text für spätere Auswertung.
HRESULT ParseText(
LPCOLESTR pszCode,
PARSEFLAGS dwFlags,
UINT nRadix,
IDebugExpression2** ppExpr,
BSTR* pbstrError,
UINT* pichError
);
int ParseText(
string pszCode,
enum_PARSEFLAGS dwFlags,
uint nRadix,
out IDebugExpression2 ppExpr,
out string pbstrError,
out uint pichError
);
Parameter
pszCode
[in] Der zu analysierende Ausdruck.dwFlags
[in] Eine Kombination von Flags aus der PARSEFLAGS-Enumeration, die die Analyse steuert.nRadix
[in] Die Basis verwendet werden soll, wenn alle numerischen Daten in pszCodeanalysiert werden.ppExpr
[out] Gibt das IDebugExpression2-Objekt zurück, das den analysierten Ausdruck darstellt, der zum Binden und zur Auswertung bereit ist.pbstrError
[out] Gibt die Fehlermeldung zurück, wenn der Ausdruck einen Fehler enthält.pichError
[out] Gibt den Zeichenindex des Fehlers in pszCode zurück, wenn der Ausdruck einen Fehler enthält.
Rückgabewert
Bei Erfolg gibt S_OKzurück. andernfalls gibt einen Fehlercode zurück.
Hinweise
Wenn diese Methode aufgerufen wird, sollte eine Debug- Modul (DE) den Ausdruck analysieren und ihn für die ordnungsgemäße Ausführung überprüfen. Die pbstrError und pichError-Parameter ausgefüllt werden kann, wenn der Ausdruck ungültig ist.
Beachten Sie, dass der Ausdruck nicht ausgewertet wird, werden nur analysiert. Neuere Aufruf der IDebugExpression2::EvaluateSync oder IDebugExpression2::EvaluateAsync-Methode wertet den analysierten Ausdruck aus.
Beispiel
Im folgenden Beispiel wird veranschaulicht, wie diese Methode für ein einfaches CEnvBlock-Objekt implementiert, das die IDebugExpressionContext2-Schnittstelle verfügbar macht. Dieses Beispiel liest den Ausdruck als analysiert als Name einer Umgebungsvariablen und ruft den Wert dieser Variablen ab.
HRESULT CEnvBlock::ParseText(
LPCOLESTR pszCode,
PARSEFLAGS dwFlags,
UINT nRadix,
IDebugExpression2 **ppExpr,
BSTR *pbstrError,
UINT *pichError)
{
HRESULT hr = E_OUTOFMEMORY;
// Create an integer variable with a value equal to one plus
// twice the length of the passed expression to be parsed.
int iAnsiLen = 2 * (wcslen(pszCode)) + 1;
// Allocate a character string of the same length.
char *pszAnsiCode = (char *) malloc(iAnsiLen);
// Check for successful memory allocation.
if (pszAnsiCode) {
// Map the wide-character pszCode string to the new pszAnsiCode character string.
WideCharToMultiByte(CP_ACP, 0, pszCode, -1, pszAnsiCode, iAnsiLen, NULL, NULL);
// Check to see if the app can succesfully get the environment variable.
if (GetEnv(pszAnsiCode)) {
// Create and initialize a CExpression object.
CComObject<CExpression> *pExpr;
CComObject<CExpression>::CreateInstance(&pExpr);
pExpr->Init(pszAnsiCode, this, NULL);
// Assign the pointer to the new object to the passed argument
// and AddRef the object.
*ppExpr = pExpr;
(*ppExpr)->AddRef();
hr = S_OK;
// If the program cannot succesfully get the environment variable.
} else {
// Set the errror message and return E_FAIL.
*pbstrError = SysAllocString(L"No such environment variable.");
hr = E_FAIL;
}
// Free the local character string.
free(pszAnsiCode);
}
return hr;
}