Funzione OleCreateFromData (ole2.h)

Crea un oggetto incorporato da un oggetto di trasferimento dati recuperato dagli Appunti o come parte di un'operazione di trascinamento OLE. Deve essere usato per implementare un'operazione di trascinamento OLE da un'operazione di trascinamento OLE.

Sintassi

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

Parametri

[in] pSrcDataObj

Puntatore all'interfaccia IDataObject nell'oggetto trasferimento dati che contiene i dati da cui viene creato l'oggetto.

[in] riid

Riferimento all'identificatore dell'interfaccia usato successivamente dal chiamante per comunicare con il nuovo oggetto (in genere IID_IOleObject, definito nelle intestazioni OLE come identificatore dell'interfaccia per IOleObject).

[in] renderopt

Valore dell'enumerazione OLERENDER che indica le funzionalità di disegno o recupero dati memorizzate nella cache locale che l'oggetto appena creato deve avere. Le considerazioni aggiuntive sono descritte nella sezione Osservazioni seguenti.

[in] pFormatEtc

Puntatore a un valore dell'enumerazione OLERENDER che indica le funzionalità di disegno o recupero dati memorizzate nella cache locale dell'oggetto appena creato. Il valore OLERENDER scelto influisce sui valori possibili per il parametro pFormatEtc .

[in] pClientSite

Puntatore a un'istanza di IOleClientSite, l'interfaccia primaria tramite cui l'oggetto richiederà i servizi dal contenitore. Questo parametro può essere NULL.

[in] pStg

Puntatore all'interfaccia IStorage nell'oggetto di archiviazione. Questo parametro potrebbe non essere NULL.

[out] ppvObj

Indirizzo della variabile puntatore che riceve il puntatore dell'interfaccia richiesto in riid. Al termine della restituzione, *ppvObj contiene il puntatore dell'interfaccia richiesto nell'oggetto appena creato.

Valore restituito

Questa funzione restituisce S_OK in caso di esito positivo. Altri valori possibili includono quanto segue.

Codice restituito Descrizione
OLE_E_STATIC
Indica che OLE può creare solo un oggetto statico.
DV_E_FORMATETC
Non sono disponibili formati accettabili per la creazione di oggetti.

Commenti

La funzione OleCreateFromData crea un oggetto incorporato da un oggetto di trasferimento dati che supporta l'interfaccia IDataObject . L'oggetto dati in questo caso è il tipo recuperato dagli Appunti con una chiamata alla funzione OleGetClipboard o fa parte di un'operazione di trascinamento OLE (l'oggetto dati viene passato a una chiamata a IDropTarget::D rop).

Se il formato FileName o FileNameW (CF_FILENAME) è presente nell'oggetto trasferimento dati e CF_EMBEDDEDOBJECT o CF_EMBEDSOURCE non esistono, OleCreateFromData tenta prima di tutto di creare un pacchetto contenente il file indicato. In genere, accetta il primo formato disponibile.

Se OleCreateFromData non può creare un pacchetto, tenta di creare un oggetto usando il formato CF_EMBEDDEDOBJECT. Se tale formato non è disponibile, OleCreateFromData tenta di crearlo con il formato CF_EMBEDSOURCE. Se nessuno di questi formati è disponibile e l'oggetto trasferimento dati supporta l'interfaccia IPersistStorage , OleCreateFromData chiama l'oggetto IPersistStorage::Save per salvare l'oggetto stesso.

Se viene selezionato un oggetto collegato esistente, copiato, viene visualizzato negli Appunti come un altro oggetto incorporabile. Di conseguenza, un'operazione incollare che richiama OleCreateFromData può creare un oggetto collegato. Dopo l'operazione di incolla, il contenitore deve chiamare la funzione QueryInterface , richiedendo IID_IOleLink (definito nelle intestazioni OLE come identificatore dell'interfaccia per IOleLink), per determinare se è stato creato un oggetto collegato.

Usare i parametri renderopt e pFormatetc per controllare la funzionalità di memorizzazione nella cache dell'oggetto appena creato. Per informazioni generali sull'uso dell'interazione di questi parametri per determinare cosa deve essere memorizzato nella cache, vedere l'enumerazione OLERENDER . Esistono tuttavia alcuni effetti specifici aggiuntivi di questi parametri nel modo in cui OleCreateFromData inizializza la cache.

Quando OleCreateFromData usa il CF_EMBEDDEDOBJECT o il formato degli Appunti CF_EMBEDSOURCE per creare l'oggetto incorporato, la differenza principale tra i due è la posizione in cui vengono archiviati i dati di inizializzazione della cache:

  • CF_EMBEDDEDOBJECT indica che l'origine è un oggetto incorporato esistente. Ha già nella cache i dati appropriati e OLE usa questi dati per inizializzare la cache del nuovo oggetto.
  • CF_EMBEDSOURCE indica che l'oggetto dati di origine contiene le informazioni di inizializzazione della cache in formati diversi da CF_EMBEDSOURCE. OleCreateFromData usa questi elementi per inizializzare la cache dell'oggetto appena incorporato.
I valori di rendering influiscono sull'inizializzazione della cache come indicato di seguito.
Valore Descrizione
OLERENDER_DRAW & OLERENDER_FORMAT Se le informazioni sulla presentazione da memorizzare nella cache sono attualmente presenti nel pool di inizializzazione della cache appropriato, viene usato. Le posizioni appropriate si trovano nella cache dell'oggetto dati di origine per CF_EMBEDDEDOBJECT e negli altri formati nell'oggetto dati di origine per CF_EMBEDSOURCE. Se le informazioni non sono presenti, la cache è inizialmente vuota, ma verrà riempita la prima volta che viene eseguito l'oggetto. Nessun altro formato viene memorizzato nella cache nell'oggetto appena creato.
OLERENDER_NONE Niente deve essere memorizzato nella cache nell'oggetto appena creato. Se l'origine ha il formato CF_EMBEDDEDOBJECT, tutti i dati memorizzati nella cache esistenti copiati vengono rimossi.
OLERENDER_ASIS Se l'origine ha il formato CF_EMBEDDEDOBJECT, la cache del nuovo oggetto consiste nel contenere gli stessi dati della cache dell'oggetto di origine. Per CF_EMBEDSOURCE, non deve essere memorizzato nella cache nell'oggetto appena creato. Questa opzione deve essere usata da contenitori più sofisticati. Dopo questa chiamata, tali contenitori chiamano IOleCache::Cache e IOleCache::Uncache per configurare esattamente ciò che deve essere memorizzato nella cache. Per CF_EMBEDSOURCE, chiamerebbero anche IOleCache::InitCache.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione ole2.h
Libreria Ole32.lib
DLL Ole32.dll
Set di API ext-ms-win-com-ole32-l1-1-3 (introdotta in Windows 10, versione 10.0.10240)

Vedi anche

Idataobject

OleCreate