Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите обработать HResult


Дмитрий ©   (2009-04-06 10:26:00) 

Есть код:
V: Variant;
R: HResult;
D: ITextDocument;

R := D.Open(V, tomOpenExisting, 0);
case R of
 ...
end;


В MSDN сказано, что

Errors are reported by negative values, but since file operations have many kinds of errors, you may not need all of the error information provided. In particular, you may not care (or you may already know) which file facility is used, namely Microsoft Windows (pVar.vt = VT_BSTR) or OLE storage for IStorage. By masking off bit 18 of an HRESULT value, you can ignore the difference and compare to its STG_E_xxx value. For example:

HRESULT hr;
VARIANT Var;
VariantInit(&Var)

Var.vt = VT_BSTR;
Var.bstrVal = SysAllocString(L"test.txt"); // Use file command
hr = pDoc->Open(&Var, tomOpenExisting, 0);
hr &= ~0x40000; // Mask off bit 18
if(hr == STG_E_FILENOTFOUND)
{
...// the rest of the code
}

вот об этом "hr &= ~0x40000; // Mask off bit 18" я уже спрашивал на форуме, получил ответ. Теперь пытаюсь сделать аналогично:
R := R or (not $40000);
но после этой операции R совсем не равно STG_E_FILENOTFOUND...

Что у меня неправильно?


Дмитрий   (2009-04-06 11:32:00) [1]

Всё, понял :) Большущее спасибо всем, особенно Anatoly Podgoretsky!


Дмитрий   (2009-04-06 11:24:00) [2]

Т.е. так?

if R and STG_E_FILENOTFOUND <> 0 then //STG_E_FILENOTFOUND присутствует


Anatoly Podgoretsky   (2009-04-06 11:19:00) [3]

> Дмитрий  (06.04.2009 11:11:03)  [3]

http://www.podgoretsky.com/ddp/bits.aspx


Amoeba   (2009-04-06 11:13:00) [4]


> если HResult составлен из нескольких флагов, как мне проверить,
>  был ли установлен какой-то конкретный из них?

HResult and Flag


Дмитрий   (2009-04-06 11:11:00) [5]

Пардон, это я "от себя" писал сюда, ошибся малость. В коде же, как ты написал, так оно и есть.

Как правильно обработать HResult в данном случае?

И ещё вопрос. Я с делфи ещё не очень знаком, скажите, если HResult составлен из нескольких флагов, как мне проверить, был ли установлен какой-то конкретный из них?

Спасибо заранее.


Palladin   (2009-04-06 10:40:00) [6]

епрст... тебе же в той ветке написали правильно... так какого хрена ты отсебятину лепишь?


Palladin   (2009-04-06 10:31:00) [7]

R := R and(not $40000);


Наверх

Титульная страница Поиск, карта сайта Написать письмо