Функция OleCreateFromData (ole2.h)
Создает внедренный объект из объекта передачи данных, полученного из буфера обмена или в рамках операции перетаскивания OLE. Он предназначен для реализации вставки из операции перетаскивания OLE.
Синтаксис
HRESULT OleCreateFromData(
[in] LPDATAOBJECT pSrcDataObj,
[in] REFIID riid,
[in] DWORD renderopt,
[in] LPFORMATETC pFormatEtc,
[in] LPOLECLIENTSITE pClientSite,
[in] LPSTORAGE pStg,
[out] LPVOID *ppvObj
);
Параметры
[in] pSrcDataObj
Указатель на интерфейс IDataObject на объекте передачи данных, который содержит данные, из которых создается объект.
[in] riid
Ссылка на идентификатор интерфейса, который позже будет использоваться вызывающим объектом для взаимодействия с новым объектом (обычно IID_IOleObject, определенный в заголовках OLE в качестве идентификатора интерфейса для IOleObject).
[in] renderopt
Значение из перечисления OLERENDER , указывающее возможности локально кэшированного рисования или извлечения данных, которые должен иметь только что созданный объект. Дополнительные рекомендации описаны в следующем разделе примечаний.
[in] pFormatEtc
Указатель на значение из перечисления OLERENDER , указывающее возможности локально кэшированного рисования или извлечения данных, которые должен иметь только что созданный объект. Выбранное значение OLERENDER влияет на возможные значения для параметра pFormatEtc .
[in] pClientSite
Указатель на экземпляр IOleClientSite, основной интерфейс, через который объект будет запрашивать службы из своего контейнера. Этот параметр может принимать значение NULL.
[in] pStg
Указатель на интерфейс IStorage в объекте хранилища. Этот параметр может не иметь значение NULL.
[out] ppvObj
Адрес переменной указателя, которая получает указатель интерфейса, запрошенный в riid. После успешного возврата *ppvObj содержит запрошенный указатель интерфейса на вновь созданный объект.
Возвращаемое значение
Эта функция возвращает S_OK об успешном выполнении. Ниже перечислены другие возможные значения.
Код возврата | Описание |
---|---|
|
Указывает, что OLE может создать только статический объект. |
|
Нет допустимых форматов для создания объектов. |
Комментарии
Функция OleCreateFromData создает внедренный объект из объекта передачи данных, поддерживающего интерфейс IDataObject . Объект данных в этом случае является типом, полученным из буфера обмена с помощью вызова функции OleGetClipboard , или является частью операции перетаскивания OLE (объект данных передается в вызов IDropTarget::D rop).
Если формат буфера обмена FileName или FileNameW (CF_FILENAME) присутствует в объекте передачи данных, а CF_EMBEDDEDOBJECT или CF_EMBEDSOURCE не существует, OleCreateFromData сначала пытается создать пакет, содержащий указанный файл. Как правило, он принимает первый доступный формат.
Если OleCreateFromData не может создать пакет, он пытается создать объект в формате CF_EMBEDDEDOBJECT. Если этот формат недоступен, OleCreateFromData пытается создать его с помощью формата CF_EMBEDSOURCE. Если ни одного из этих форматов не существует и объект передачи данных поддерживает интерфейс IPersistStorage , OleCreateFromData вызывает IPersistStorage::Save объекта для сохранения объекта.
Если существующий связанный объект выбран, а затем скопирован, он отображается в буфере обмена как просто другой встраиваемый объект. Следовательно, операция вставки, вызывающая OleCreateFromData , может создать связанный объект. После операции вставки контейнер должен вызвать функцию QueryInterface , запросив IID_IOleLink (определенный в заголовках OLE как идентификатор интерфейса для IOleLink), чтобы определить, был ли создан связанный объект.
Используйте параметры renderopt и pFormatetc для управления возможностью кэширования только что созданного объекта. Общие сведения об использовании взаимодействия этих параметров для определения кэшируемых объектов см. в перечислении OLERENDER . Однако эти параметры влияют на то, как OleCreateFromData инициализирует кэш.
Если oleCreateFromData использует формат CF_EMBEDDEDOBJECT или CF_EMBEDSOURCE буфера обмена для создания внедренного объекта, main разница между ними заключается в том, где хранятся данные инициализации кэша:
- CF_EMBEDDEDOBJECT указывает, что источником является существующий внедренный объект. В кэше уже есть соответствующие данные, и OLE использует эти данные для инициализации кэша нового объекта.
- CF_EMBEDSOURCE указывает, что исходный объект данных содержит сведения об инициализации кэша в форматах, отличных от CF_EMBEDSOURCE. OleCreateFromData использует их для инициализации кэша вновь внедренного объекта.
Значение | Описание |
---|---|
OLERENDER_DRAW & OLERENDER_FORMAT | Если данные представления, которые необходимо кэшировать, в настоящее время присутствуют в соответствующем пуле инициализации кэша, она используется. (Соответствующие расположения находятся в кэше исходных объектов данных для CF_EMBEDDEDOBJECT и в других форматах в объекте исходных данных для CF_EMBEDSOURCE.) Если сведения отсутствуют, кэш изначально пуст, но будет заполнен при первом запуске объекта. Другие форматы не кэшируются во вновь созданном объекте. |
OLERENDER_NONE | В только что созданном объекте не требуется кэшировать ничего. Если источник имеет формат CF_EMBEDDEDOBJECT, все существующие скопированные кэшированные данные удаляются. |
OLERENDER_ASIS | Если источник имеет формат CF_EMBEDDEDOBJECT, кэш нового объекта должен содержать те же данные кэша, что и исходный объект. Для CF_EMBEDSOURCE кэшировать во вновь созданном объекте не нужно. Этот параметр следует использовать в более сложных контейнерах. После этого вызова такие контейнеры будут вызывать IOleCache::Cache и IOleCache::Uncache , чтобы настроить именно то, что требуется кэшировать. Для CF_EMBEDSOURCE они также будут вызывать IOleCache::InitCache. |
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | ole2.h |
Библиотека | Ole32.lib |
DLL | Ole32.dll |
Набор API | ext-ms-win-com-ole32-l1-1-3 (представлен в Windows 10 версии 10.0.10240) |