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 |
---|---|
|
Indica que OLE solo puede crear un objeto estático. |
|
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.
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) |