IDebugExpressionContext2::ParseText
Analysiert einen Ausdruck in Textform für die spätere Auswertung.
Syntax
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-Aufzählung , die die Analyse steuert.
nRadix
[in] Das Radix, das bei der Analyse numerischer Informationen verwendet pszCode
werden soll.
ppExpr
[out] Gibt das IDebugExpression2 -Objekt zurück, das den analysierten Ausdruck darstellt, der für die Bindung und Auswertung bereit ist.
pbstrError
[out] Gibt die Fehlermeldung zurück, wenn der Ausdruck einen Fehler enthält.
pichError
[out] Gibt den Zeichenindex des Fehlers zurück pszCode
, wenn der Ausdruck einen Fehler enthält.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK
, andernfalls ein Fehlercode zurückgegeben.
Hinweise
Wenn diese Methode aufgerufen wird, sollte ein Debugmodul (DE) den Ausdruck analysieren und auf Richtigkeit überprüfen. Die Parameter und pichError
Parameter pbstrError
können ausgefüllt werden, wenn der Ausdruck ungültig ist.
Beachten Sie, dass der Ausdruck nicht ausgewertet wird, nur analysiert. Ein späterer Aufruf der Methoden EvaluateSync oder EvaluateAsync wertet den analysierten Ausdruck aus.
Beispiel
Das folgende Beispiel zeigt, wie Sie diese Methode für ein einfaches CEnvBlock
Objekt implementieren, das die IDebugExpressionContext2-Schnittstelle verfügbar macht. In diesem Beispiel wird der Ausdruck als Name einer Umgebungsvariable analysiert und der Wert aus dieser Variablen abgerufen.
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 successfully 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 successfully 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;
}