#delphi #stream #delphi-2010 #ole
#delphi #поток #delphi-2010 #ole
Вопрос:
Мне нужно управлять операциями перетаскивания OLE с помощью Delphi. Теперь у меня проблема — мне нужно поместить некоторые данные из TStream в глобальный TStgMedium (чтобы отправить их через OLE-методы с использованием IDataObject).
Я предполагаю, что для этого должен быть какой-то часто используемый шаблон? Можете ли вы предоставить какой-нибудь пример кода?
Ответ №1:
Вероятно, проще всего использовать TStreamAdapter
для адаптации TStream
экземпляра в IStream
.
Другой подход, который возникает, заключается в передаче HGLOBAL
в IDataObject.SetData
, но это было бы несколько неэффективно для больших потоков.
Комментарии:
1. Хорошо, но как сохранить созданный IStream в TStgMedium?
2. Присвойте его
TStgMedium.stm
и установитеTStgMedium.tymed
вTYMED_ISTREAM
3. Спасибо! так просто. Можете ли вы также показать пример метода HGLOBAL?
4. Используйте GlobalAlloc для получения HGLOBAL. Вызовите GlobalLock, чтобы получить указатель. Затем скопируйте весь поток в память за этим указателем. Вы можете найти все подробности на MSDN.