Шаг 56 - HRESULT и отладка, реальный пример

Я уже писал, что 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 и запустим программу на выполнение до курсора.

56_1.gif (2258 b)

Внизу у нас будут значения текущих переменных.

56_2.gif (3080 b)

Обратите внимание на то, что у меня стоит просмотр как Hex. Это необходимо, чтобы скопировтать значение переменной rez. Если на ней два раза щелкнуть, то появится возможность ее скопировать через меню Edit Copy:

56_3.gif (8254 b)

Вот теперь запустим Error Lookup. Значение переменной уже должно быть в окне. Если нет, то вставьте. Нажав на кнопку Look Up мы увидим ошибку.

56_4.gif (2422 b)

И правда мы при открытии хранилища не указали флаги. Как его открывать, то есть с каким доступом, а это необходимо.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 1.03.2001