C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 65 - Исследование хранилища на примере WORD EXCEL / ActiveX по шагам / Приложение

Шаг 65 - Исследование хранилища на примере WORD EXCEL

Итак, у нас есть хранилище. Мы умеем его создавать и открывать. Только наше хранилище пока пустое. Я еще упоминал, что многое программное обеспечение Microsoft хранит данные именно так. То есть организует хранилище куда и помещает свои данные. Не знаю как все программное обеспечение, но WORD точно. Итак, пока не вдаваясь в подробности. Открыв хранилище и получив к нему интерфейс мы можем получить интерфейс к перечислителям EnumElements, а у этого перечислителя есть метод Next. С помощью него можно перебирать содержимое хранилища. Если это понятно, то вот код. Не вдавайтесь в детали пока. Главное просто посмотреть сейчас как это работает. Я создал документ WORD и поместил в него текст и графику. Вы можете использовать любой. Вот пример.

#include "stdafx.h"
#include "windows.h"
#include "ole2.h"
#include "iostream.h"


int main(int argc, char* argv[])
{
	OLECHAR filename[20];
	wcscpy(filename,L"1.xls");
	LPSTORAGE pIStorage=NULL;
	HRESULT rez;
	rez=StgOpenStorage(filename,NULL, STGM_READ |
		STGM_SHARE_EXCLUSIVE,NULL,0,&pIStorage);
	if (!FAILED(rez))
	{
		cout << "Ok open" << endl;
		LPENUMSTATSTG lpEnum=NULL;
		pIStorage->EnumElements(0,NULL,0,&lpEnum); 
		if (lpEnum!=NULL)
		{
			cout << "Ok enum" << endl;
			ULONG uCount;
			STATSTG stat;
			while (lpEnum->Next(1,&stat,&uCount)==S_OK)
			{
			cout << (LPSTR)stat.pwcsName << endl;
			}
			lpEnum->Release(); 
		}
		else cout << "Error enum" << endl;
		pIStorage->Release();
	}
	else cout << "Error open" << endl;
	return 0;
}

Результат его работы такой.

Ok open
Ok enum
D
1
M

O
W
Press any key to continue

Ну очень впечатляет. Самое главное, что это хранилище. Открылось и сработало. Если хотите видеть нормальные надписи, то смотрите "Шаг 57 - OLECHAR в CHAR и обратно", о том как конвертировать символы. То же самое будет работать для Excel. Попробуйте.

65_1.gif (2114 b)

65_2.gif (1739 b)

65_3.gif (1946 b)

Обратите внимание на сигнатуру файлов. Они все начинаются с РП. Вот такие файлы и есть хранилища и с ними можно работать указанными методами.


| |
Автор Каев Артем.
[AD]