Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / IStream / 16 сообщений из 16, страница 1 из 1
28.09.2020, 18:32
    #40003617
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
столкнулся с данным типом недавно, помогите решить вопрос получения данных из рекордсета в IStream
...
Рейтинг: 0 / 0
28.09.2020, 19:13
    #40003636
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
И где вопрос-то? Обычно помогает точное следование документации.


И ты себе не представляешь сколько совершенно разных штук носит гордое имя "IStream"...
...
Рейтинг: 0 / 0
28.09.2020, 21:18
    #40003679
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Есть файл, загруженный в поле БД.
Есть объект, которому нужно передать то, что находится в поле БД (рекордсет).
Объект принимает значение через

DWGIm->LoadFromIStream(pIStrm);

Я пробовал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
TComInterface<IStream> pIStrm;
			//TMemoryStream *pMStrm;
			TMemoryStream * pMStrm = new TMemoryStream;
            TField * field;
			field = Get_P_Image->FieldByName("Pic");
			TBlobField * blob = (TBlobField*) field;
			blob->SaveToStream(pMStrm);
			int sz = pMStrm->Size;
			if (sz > NULL)
			{
				pMStrm->Seek(0, 0);
				TIStreamWrapper *pWrapper = new TIStreamWrapper(pIStrm);
				try
				{
					// or: pMStrm->LoadFromStream(pWrapper);
					pMStrm->CopyFrom(pWrapper, 0);
				}
				__finally
				{
					delete pWrapper;
				}
				DWGIm->LoadFromIStream(pIStrm);
			}
			delete pIStrm;
class TIStreamWrapper : public TStream
{
private:
	TComInterface<IStream> pIStrm;

protected:
	virtual __int64 __fastcall GetSize();
	virtual void __fastcall SetSize(const __int64 NewSize);

public:
	__fastcall TIStreamWrapper(IStream *Strm);
	virtual int __fastcall Read(void *Buffer, int Count);
	virtual int __fastcall Write(const void *Buffer, int Count);
	virtual __int64 __fastcall Seek(const __int64 Offset, TSeekOrigin Origin);
};



ошибку даёт
OleCheck(pIStrm->Seek(li, IStreamSeekOrigin[Origin], &ul))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
__int64 __fastcall TIStreamWrapper::Seek(const __int64 Offset, TSeekOrigin Origin)
{
    LARGE_INTEGER li;
    li.QuadPart = Offset;
    ULARGE_INTEGER ul;
    OleCheck(pIStrm->Seek(li, IStreamSeekOrigin[Origin], &ul));
    return ul.QuadPart;
}
...
Рейтинг: 0 / 0
30.09.2020, 17:40
    #40004325
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Dimitry Sibiryakov,
ну что, мимо?
...
Рейтинг: 0 / 0
30.09.2020, 18:24
    #40004333
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Mizer73ну что, мимо?

Да, совершенно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.09.2020, 21:07
    #40004356
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Dimitry Sibiryakov

Mizer73ну что, мимо?

Да, совершенно.

ну, грусть, тогда...
...
Рейтинг: 0 / 0
01.10.2020, 11:45
    #40004489
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
(задумчиво)

Какой ужасный код. В нем соотношение полезных строк к шуму очень мало. Тоесть много ритуала
и мало бизнес-смысла или алгоритмического смысла.
...
Рейтинг: 0 / 0
30.10.2020, 01:13
    #40013299
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
mayton
(задумчиво)

Какой ужасный код. В нем соотношение полезных строк к шуму очень мало. Тоесть много ритуала
и мало бизнес-смысла или алгоритмического смысла.


требую бригаду толкователей
...
Рейтинг: 0 / 0
30.10.2020, 01:17
    #40013300
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Mizer73, ты наверное садист.

Ты написал

Код: plaintext
1.
2.
ошибку даёт
OleCheck(pIStrm->Seek(li, IStreamSeekOrigin[Origin], &ul))



Но чтобы нам, участникам форума ее пофиксить - ее надо сначала воспроизвести.
А для этого надо твои огрызки вставить в пустой проект и собрать.

Или скомпилировать в уме.

Так ты хотел?
...
Рейтинг: 0 / 0
30.10.2020, 01:20
    #40013301
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Однако, алгоритм поменялся, хотя задача та же: записать в БД файл - записывается через blob и stream, прочитать файл из БД - читается - туда же:
Код: plaintext
1.
2.
3.
TField * field;
TBlobField * blob = (TBlobField*) field;
TMemoryStream * stream = new TMemoryStream;



привести процесс к виду, как на картинке (именно так он читает файл):

Код: plaintext
1.
2.
BSTR fn = WideString(OpenDialog1->FileName).c_bstr();
компонент->LoadFile(fn);



не имел дел с типами BSTR, и весь не знаю, как ...
...
Рейтинг: 0 / 0
30.10.2020, 20:43
    #40013589
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
mayton
Mizer73, ты наверное садист.

Ты написал

Код: plaintext
1.
2.
ошибку даёт
OleCheck(pIStrm->Seek(li, IStreamSeekOrigin[Origin], &ul))



Но чтобы нам, участникам форума ее пофиксить - ее надо сначала воспроизвести.
А для этого надо твои огрызки вставить в пустой проект и собрать.

Или скомпилировать в уме.

Так ты хотел?


Это уже прошлое.
Меня интересует сейчас то, что написал вчера.
...
Рейтинг: 0 / 0
30.10.2020, 23:01
    #40013606
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Mizer73не имел дел с типами BSTR, и весь не знаю, как ...

Правая кнопка мыши - Найти объявление типа. Смотришь что это за тип, читаешь документацию
по работе с ним. Всё, телемаркет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.10.2020, 11:46
    #40013667
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Dimitry Sibiryakov, классный совет. А готовое решение?
...
Рейтинг: 0 / 0
31.10.2020, 13:18
    #40013681
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Mizer73А готовое решение?

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/automat/bstr
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.11.2020, 13:18
    #40014247
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Dimitry Sibiryakov,
спасибо
...
Рейтинг: 0 / 0
02.11.2020, 21:48
    #40014600
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IStream
Dimitry Sibiryakov,
так можно использовать тип bstr как просто строку данных?
Какой тогда тип поля в SQL сервера подойдет?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / IStream / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]