Поделиться через


Функция 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_E_STATIC
Указывает, что OLE может создать только статический объект.
DV_E_FORMATETC
Нет допустимых форматов для создания объектов.

Комментарии

Функция 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 использует их для инициализации кэша вновь внедренного объекта.
Значения renderopt влияют на инициализацию кэша следующим образом.
Значение Описание
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)

См. также раздел

Idataobject

OleCreate