Я уже писал, что HRESULT довольно сложная переменная и определить ошибку по ней довольно сложно. Давайте посмотрим как это исправить. В шаге "Шаг 44 - Обработка ошибок COM - HRESULT" было написано про Error Lookup. Вот теперь все вместе и сделаем. Напишем программу:
#include "stdafx.h" #include "windows.h" #include "ole2.h" #include "iostream.h" int main(int argc, char* argv[]) { OLECHAR filename[20]; wcscpy(filename,L"test.stg"); LPSTORAGE pIStorage=NULL; HRESULT rez; rez=StgOpenStorage(filename,NULL, STGM_READ ,NULL,0,&pIStorage); if (!FAILED(rez)) { cout << "Ok open" << endl; } else cout << "Error open" << endl; return 0; }
Запустим и посмотрим, что будет:
Error open Press any key to continue
Ошибка !!! Установим курсор на строку с Failed и запустим программу на выполнение до курсора.
Внизу у нас будут значения текущих переменных.
Обратите внимание на то, что у меня стоит просмотр как Hex. Это необходимо, чтобы скопировтать значение переменной rez. Если на ней два раза щелкнуть, то появится возможность ее скопировать через меню Edit Copy:
Вот теперь запустим Error Lookup. Значение переменной уже должно быть в окне. Если нет, то вставьте. Нажав на кнопку Look Up мы увидим ошибку.
И правда мы при открытии хранилища не указали флаги. Как его открывать, то есть с каким доступом, а это необходимо.