Freigeben über


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;  
}  

Siehe auch

Referenz

IDebugExpressionContext2

PARSEFLAGS

IDebugExpression2

IDebugExpression2::EvaluateAsync

IDebugExpression2::EvaluateSync