Función OleCreateFromData (ole2.h)

Crea un objeto incrustado a partir de un objeto de transferencia de datos recuperado del Portapapeles o como parte de una operación de arrastrar y colocar OLE. Está pensado para usarse para implementar un pegado desde una operación de arrastrar y colocar OLE.

Sintaxis

HRESULT OleCreateFromData(
  [in]  LPDATAOBJECT    pSrcDataObj,
  [in]  REFIID          riid,
  [in]  DWORD           renderopt,
  [in]  LPFORMATETC     pFormatEtc,
  [in]  LPOLECLIENTSITE pClientSite,
  [in]  LPSTORAGE       pStg,
  [out] LPVOID          *ppvObj
);

Parámetros

[in] pSrcDataObj

Puntero a la interfaz IDataObject del objeto de transferencia de datos que contiene los datos desde los que se crea el objeto.

[in] riid

Referencia al identificador de la interfaz que el autor de la llamada usa más adelante para comunicarse con el nuevo objeto (normalmente IID_IOleObject, definido en los encabezados OLE como identificador de interfaz para IOleObject).

[in] renderopt

Valor de la enumeración OLERENDER que indica las funcionalidades de dibujo o recuperación de datos almacenadas localmente en caché que debe tener el objeto recién creado. Las consideraciones adicionales se describen en la sección Comentarios siguiente.

[in] pFormatEtc

Puntero a un valor de la enumeración OLERENDER que indica las capacidades de dibujo o recuperación de datos almacenadas localmente en caché que debe tener el objeto recién creado. El valor OLERENDER elegido afecta a los valores posibles para el parámetro pFormatEtc .

[in] pClientSite

Puntero a una instancia de IOleClientSite, la interfaz principal a través de la cual el objeto solicitará servicios de su contenedor. Este parámetro puede ser NULL.

[in] pStg

Puntero a la interfaz IStorage en el objeto de almacenamiento. Este parámetro puede no ser NULL.

[out] ppvObj

Dirección de la variable de puntero que recibe el puntero de interfaz solicitado en riid. Tras la devolución correcta, *ppvObj contiene el puntero de interfaz solicitado en el objeto recién creado.

Valor devuelto

Esta función devuelve S_OK si se ejecuta correctamente. Otros valores posibles incluyen lo siguiente.

Código devuelto Descripción
OLE_E_STATIC
Indica que OLE solo puede crear un objeto estático.
DV_E_FORMATETC
No hay formatos aceptables disponibles para la creación de objetos.

Comentarios

La función OleCreateFromData crea un objeto incrustado a partir de un objeto de transferencia de datos que admite la interfaz IDataObject . En este caso, el objeto de datos es el tipo recuperado del Portapapeles con una llamada a la función OleGetClipboard o forma parte de una operación ole de arrastrar y colocar (el objeto de datos se pasa a una llamada a IDropTarget::D rop).

Si el formato del Portapapeles FileName o FileNameW (CF_FILENAME) está presente en el objeto de transferencia de datos y CF_EMBEDDEDOBJECT o CF_EMBEDSOURCE no existen, OleCreateFromData intenta crear primero un paquete que contenga el archivo indicado. Por lo general, toma el primer formato disponible.

Si OleCreateFromData no puede crear un paquete, intenta crear un objeto con el formato CF_EMBEDDEDOBJECT. Si ese formato no está disponible, OleCreateFromData intenta crearlo con el formato CF_EMBEDSOURCE. Si ninguno de estos formatos está disponible y el objeto de transferencia de datos admite la interfaz IPersistStorage , OleCreateFromData llama al objeto IPersistStorage::Save para que el objeto se guarde.

Si se selecciona un objeto vinculado existente, después se copia, aparece en el Portapapeles como otro objeto incrustable. Por consiguiente, una operación de pegado que invoca OleCreateFromData puede crear un objeto vinculado. Después de la operación de pegado, el contenedor debe llamar a la función QueryInterface , solicitando IID_IOleLink (definido en los encabezados OLE como identificador de interfaz para IOleLink), para determinar si se creó un objeto vinculado.

Use los parámetros renderopt y pFormatetc para controlar la funcionalidad de almacenamiento en caché del objeto recién creado. Para obtener información general sobre el uso de la interacción de estos parámetros para determinar qué se va a almacenar en caché, consulte la enumeración OLERENDER . Sin embargo, hay algunos efectos específicos adicionales de estos parámetros en la forma en que OleCreateFromData inicializa la memoria caché.

Cuando OleCreateFromData usa el CF_EMBEDDEDOBJECT o el formato del Portapapeles de CF_EMBEDSOURCE para crear el objeto incrustado, la principal diferencia entre los dos es donde se almacenan los datos de inicialización de caché:

  • CF_EMBEDDEDOBJECT indica que el origen es un objeto incrustado existente. Ya tiene en su memoria caché los datos adecuados y OLE usa estos datos para inicializar la memoria caché del nuevo objeto.
  • CF_EMBEDSOURCE indica que el objeto de datos de origen contiene la información de inicialización de caché en formatos distintos de CF_EMBEDSOURCE. OleCreateFromData los usa para inicializar la memoria caché del objeto recién incrustado.
Los valores renderopt afectan a la inicialización de caché de la siguiente manera.
Valor Descripción
OLERENDER_DRAW & OLERENDER_FORMAT Si la información de presentación que se va a almacenar en caché está presente actualmente en el grupo de inicialización de caché adecuado, se usa. (Las ubicaciones adecuadas están en la caché de objetos de datos de origen para CF_EMBEDDEDOBJECT y en los demás formatos del objeto de datos de origen para CF_EMBEDSOURCE). Si la información no está presente, la memoria caché está inicialmente vacía, pero se rellenará la primera vez que se ejecute el objeto. Ningún otro formato se almacena en caché en el objeto recién creado.
OLERENDER_NONE No hay nada que se almacene en caché en el objeto recién creado. Si el origen tiene el formato CF_EMBEDDEDOBJECT, se quitan los datos almacenados en caché existentes que se hayan copiado.
OLERENDER_ASIS Si el origen tiene el formato CF_EMBEDDEDOBJECT, la memoria caché del nuevo objeto es contener los mismos datos de caché que el objeto de origen. Para CF_EMBEDSOURCE, no hay nada que se almacene en caché en el objeto recién creado. Los contenedores más sofisticados deben usar esta opción. Después de esta llamada, estos contenedores llamarían a IOleCache::Cache e IOleCache::Uncache para configurar exactamente lo que se va a almacenar en caché. Por CF_EMBEDSOURCE, también llamarían a IOleCache::InitCache.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado ole2.h
Library Ole32.lib
Archivo DLL Ole32.dll
Conjunto de API ext-ms-win-com-ole32-l1-1-3 (introducido en Windows 10, versión 10.0.10240)

Consulte también

IDataObject

OleCreate