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


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

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
IStream
    #40004325
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
ну что, мимо?
...
Рейтинг: 0 / 0
IStream
    #40004333
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73ну что, мимо?

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

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

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

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

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

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


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

Ты написал

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



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

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

Так ты хотел?
...
Рейтинг: 0 / 0
IStream
    #40013301
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Однако, алгоритм поменялся, хотя задача та же: записать в БД файл - записывается через 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
IStream
    #40013589
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Mizer73, ты наверное садист.

Ты написал

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



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

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

Так ты хотел?


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

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

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


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