Справочник по технологии COM
Страница 87. VarParseNumFromStr


 

VarParseNumFromStr

Создает не зависящее от типа представление числа, заданного в строке.
Функция VarParseNumFromStr заполняет элемент dwOutFlags в соответствии с обнаруженными особенностями строки. Это позволяет вызывающему на основании формата введенного числа определить, какой числовой тип для него использовать. Например, одно приложение может использовать тип CURRENCY, если в строке задан символ денежной единицы, другое же может использовать тип с плавающей запятой, если в строке задана экспонента.

HRESULT VarParseNumFromStr
(
[in] OLECHAR* strln,
[in] LCID kid,
[in] unsigned long dwFlags,
[in] NUMPARSE *pnumprs,
[out] unsigned char *rgbDig
);

Параметры:
strln
Входная строка, которую нужно преобразовать в число.
kid
Идентификатор местности.
pnumprs
Результаты разбора строки.
dwFlags
Позволяет управлять разбором, т. е. определять допустимый синтаксис числа. Если параметр равен нулю, то входная строка не должна содержать ничего, кроме десятичных цифр. Каждый установленный флаг активизирует разбор соответствующей синтаксической конструкции. При стандартном разборе Автоматизации (например, при работе VarI2FromStr) все флаги установлены (NUMPRS_STD).
rgbDig
Массив rgbDig заполняется значениями цифр в диапазоне 0-7, 0-9 или 0-15, в зависимости от того, является ли число восьмеричным, десятичным или шестнадца-теричным. Нули в начале отбрасываются. Для десятичных чисел нули на конце также отбрасываются, если только число не равно нулю. В последнем случае возвращается одна цифра 0.

Коды возврата:
Из возвращенного HRESULT получают один из следующих кодов возврата:

Код возврата Значение
S_OK Успех.
E_OUTOFMEMORY Невозможно выделить память для внутреннего буфера. (Используется только для DBCS, чтобы создать копию строки, состоящую из однобайтовых символов.)
DISP_E_TYPEMISMATCH Строку нельзя преобразовать в число, либо отсутствует парная закрывающаяся скобка. В первом случае cDig и cchUsed в структуре NUMPARSE будут равны 0. Во втором случае структура NUMPARSE и массив цифр будут полностью сформированы так, как если бы закрывающаяся скобка присутствовала.
DISP_E_OVERFLOW Для шестнадцатеричных и восьмеричных чисел это означает, что цифр больше, чем умещается в массив. Для десятичных чисел — экспонента превосходит максимальное значение. В обоих случаях структура NUMPARSE и массив цифр полностью сформированы (в случае десятичного числа значение поля cchUsed не учитывает экспоненту).

 
Следующая статья »