Здравствуйте!
Вот надо из MS Word выудить текст. Экспериментирую.. Модифицировав один код хотел прочитать данные из потока. Но, толи с этим буффером потом делать что-то нужно, то что вообщем в буфере после этого содержится всякий мусор. Инфу в инете нахожу только на дельфе. Сам пишу на VC++ (Студия 2003 (Ver. 7.0))
начиная с "ls->OpenStream(stat.pwcsName, 0,STGM_READ|STGM_SHARE_EXCLUSIVE, 0, &IMyStream);"
и заканчивая delete []some_str; — этот кусок кода меня интересует. Я хотел получить текст, а получаю бред какой-то.
Помогите пожайлуста разобраться.
Заранее благодарю.
Вот код:
#include <windows.h>
#include <ole2.h>
#include <iostream.h>
#include <stdio.h>
int level=0;
walk(char *s, LPSTORAGE ls)
{
OLECHAR FileName[256];
LPENUMSTATSTG lpEnum=NULL;
LPSTORAGE pIStorage=NULL, pIStorage2=NULL;
IStream * IMyStream;
ULONG uCount;
STATSTG stat;
int i;
if (!ls) {
mbstowcs(FileName, s, 256);
wprintf(L"[%s]\n", FileName);
StgOpenStorage(FileName, NULL,
STGM_READ|STGM_SHARE_EXCLUSIVE,
NULL,0,&pIStorage);
walk("", pIStorage);
}
else {
ls->EnumElements(0,NULL,0,&lpEnum);
if (lpEnum)
while (lpEnum->Next(1,&stat,&uCount)==S_OK) {
for (i=0;i<level;i++) wprintf(L" ");
wprintf(L"%d: %s\n", stat.type, (LPSTR)stat.pwcsName);
if (stat.type == 2)
{
ULONG ulBytesRead;
ls->OpenStream(stat.pwcsName, 0,STGM_READ|STGM_SHARE_EXCLUSIVE, 0, &IMyStream);
char *some_str = new char[stat.cbSize.QuadPart];
if (IMyStream->Read(some_str, stat.cbSize.QuadPart, &ulBytesRead )!=S_OK)
{
IMyStream->Release();
}
for (int i = 0; i<stat.cbSize.QuadPart; i++)
printf("%c", some_str[i]);
printf("\n");
delete []some_str;
} else
if (stat.type==STGTY_STORAGE) {
ls->OpenStorage(stat.pwcsName, NULL,
STGM_READ|STGM_SHARE_EXCLUSIVE,
NULL, 0, &pIStorage2);
level++;
walk("", pIStorage2);
level--;
}
};
ls->Release();
}
}
int main(int argc, char* argv[]) {
if (argc>1) walk(argv[1],NULL);
}