IDebugExpressionContext2::ParseText
後で評価するために、テキスト形式の式を解析します。
構文
int ParseText(
string pszCode,
enum_PARSEFLAGS dwFlags,
uint nRadix,
out IDebugExpression2 ppExpr,
out string pbstrError,
out uint pichError
);
パラメーター
pszCode
[入力] 解析する式。
dwFlags
[入力] 解析を制御する PARSEFLAGS 列挙型のフラグの組み合わせ。
nRadix
[入力] pszCode
の数値情報の解析に使用される基数。
ppExpr
[出力] バインドと評価の準備ができている、解析された式を表す IDebugExpression2 オブジェクトを返します。
pbstrError
[出力] 式にエラーが含まれている場合は、エラー メッセージを返します。
pichError
[出力] 式にエラーが含まれている場合は、pszCode
のエラーの文字インデックスを返します。
戻り値
成功した場合は、S_OK
を返します。それ以外の場合は、エラー コードを返します。
解説
このメソッドが呼び出されると、デバッグ エンジン (DE) は、式を解析して、正しいかどうかを検証する必要があります。 式が無効な場合は、pbstrError
および pichError
パラメーターを設定できます。
式は評価されず、解析のみが行われることに注意してください。 後で EvaluateSync または EvaluateAsync メソッドを呼び出すと、解析された式が評価されます。
例
次の例は、IDebugExpressionContext2 インターフェイスを公開する単純な CEnvBlock
オブジェクトに対してこのメソッドを実装する方法を示しています。 この例では、解析される式を環境変数の名前と見なし、その変数から値を取得します。
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;
}