Delphi: Как поместить данные из TStream в TStgMedium для обработки OLE?

#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.