OleCreateFromData-Funktion (ole2.h)

Erstellt ein eingebettetes Objekt aus einem Datenübertragungsobjekt, das entweder aus der Zwischenablage oder als Teil eines OLE-Drag-and-Drop-Vorgangs abgerufen wird. Es soll verwendet werden, um ein Einfügen aus einem OLE-Drag-and-Drop-Vorgang zu implementieren.

Syntax

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

Parameter

[in] pSrcDataObj

Zeiger auf die IDataObject-Schnittstelle für das Datenübertragungsobjekt, das die Daten enthält, aus denen das Objekt erstellt wird.

[in] riid

Verweis auf den Bezeichner der Schnittstelle, die der Aufrufer später für die Kommunikation mit dem neuen Objekt verwendet (in der Regel IID_IOleObject, definiert in den OLE-Headern als Schnittstellenbezeichner für IOleObject).

[in] renderopt

Wert aus der OLERENDER-Enumeration , der die lokal zwischengespeicherten Zeichnungs- oder Datenabruffunktionen angibt, über die das neu erstellte Objekt verfügen soll. Weitere Überlegungen werden im folgenden Abschnitt "Hinweise" beschrieben.

[in] pFormatEtc

Zeiger auf einen Wert aus der OLERENDER-Enumeration , der die lokal zwischengespeicherten Zeichnungs- oder Datenabruffunktionen angibt, über die das neu erstellte Objekt verfügen soll. Der ausgewählte OLERENDER-Wert wirkt sich auf die möglichen Werte für den pFormatEtc-Parameter aus.

[in] pClientSite

Zeiger auf eine instance von IOleClientSite, der primären Schnittstelle, über die das Objekt Dienste von seinem Container anfordere. Dieser Parameter kann NULL sein.

[in] pStg

Zeiger auf die IStorage-Schnittstelle für das Speicherobjekt. Dieser Parameter ist möglicherweise nicht NULL.

[out] ppvObj

Adresse der Zeigervariablen, die den in riid angeforderten Schnittstellenzeiger empfängt. Nach erfolgreicher Rückgabe enthält *ppvObj den angeforderten Schnittstellenzeiger für das neu erstellte Objekt.

Rückgabewert

Diese Funktion gibt S_OK nach Erfolg zurück. Weitere mögliche Werte sind:

Rückgabecode Beschreibung
OLE_E_STATIC
Gibt an, dass OLE nur ein statisches Objekt erstellen kann.
DV_E_FORMATETC
Für die Objekterstellung sind keine akzeptablen Formate verfügbar.

Hinweise

Die OleCreateFromData-Funktion erstellt ein eingebettetes Objekt aus einem Datenübertragungsobjekt, das die IDataObject-Schnittstelle unterstützt. Das Datenobjekt ist in diesem Fall entweder der Typ, der mit einem Aufruf der OleGetClipboard-Funktion aus der Zwischenablage abgerufen wird, oder teil eines OLE-Drag-and-Drop-Vorgangs (das Datenobjekt wird an einen Aufruf von IDropTarget::D rop übergeben).

Wenn im Datenübertragungsobjekt entweder das Format FileName oder FileNameW CF_FILENAME (FileNameW) vorhanden ist und CF_EMBEDDEDOBJECT oder CF_EMBEDSOURCE nicht vorhanden sind, versucht OleCreateFromData zunächst, ein Paket zu erstellen, das die angegebene Datei enthält. Im Allgemeinen wird das erste verfügbare Format verwendet.

Wenn OleCreateFromData kein Paket erstellen kann, wird versucht, ein Objekt mit dem format CF_EMBEDDEDOBJECT zu erstellen. Wenn dieses Format nicht verfügbar ist, versucht OleCreateFromData , es mit dem format CF_EMBEDSOURCE zu erstellen. Wenn keines dieser Formate verfügbar ist und das Datenübertragungsobjekt die IPersistStorage-Schnittstelle unterstützt, ruft OleCreateFromData die IPersistStorage::Save des Objekts auf, damit das Objekt selbst gespeichert wird.

Wenn ein vorhandenes verknüpftes Objekt ausgewählt und dann kopiert wird, wird es in der Zwischenablage als ein weiteres einbettbares Objekt angezeigt. Folglich kann ein Einfügevorgang, der OleCreateFromData aufruft, ein verknüpftes Objekt erstellen. Nach dem Einfügevorgang sollte der Container die QueryInterface-Funktion aufrufen und IID_IOleLink anfordern (die in den OLE-Headern als Schnittstellenbezeichner für IOleLink definiert sind), um zu bestimmen, ob ein verknüpftes Objekt erstellt wurde.

Verwenden Sie die Parameter renderopt und pFormatetc , um die Zwischenspeicherungsfunktion des neu erstellten Objekts zu steuern. Allgemeine Informationen zur Verwendung der Interaktion dieser Parameter zum Bestimmen, was zwischengespeichert werden soll, finden Sie in der OLERENDER-Enumeration . Es gibt jedoch einige zusätzliche spezifische Auswirkungen dieser Parameter auf die Art und Weise, wie OleCreateFromData den Cache initialisiert.

Wenn OleCreateFromData entweder das CF_EMBEDDEDOBJECT- oder das CF_EMBEDSOURCE-Zwischenablageformat verwendet, um das eingebettete Objekt zu erstellen, ist der Standard Unterschied zwischen den beiden, wo die Cacheinitialisierungsdaten gespeichert werden:

  • CF_EMBEDDEDOBJECT gibt an, dass die Quelle ein vorhandenes eingebettetes Objekt ist. Es hat bereits die entsprechenden Daten im Cache, und OLE verwendet diese Daten, um den Cache des neuen Objekts zu initialisieren.
  • CF_EMBEDSOURCE gibt an, dass das Quelldatenobjekt die Cacheinitialisierungsinformationen in anderen Formaten als CF_EMBEDSOURCE enthält. OleCreateFromData verwendet diese, um den Cache des neu eingebetteten Objekts zu initialisieren.
Die renderopt-Werte wirken sich wie folgt auf die Cacheinitialisierung aus.
Wert BESCHREIBUNG
OLERENDER_DRAW & OLERENDER_FORMAT Wenn die zwischengespeicherten Präsentationsinformationen derzeit im entsprechenden Cacheinitialisierungspool vorhanden sind, werden sie verwendet. (Geeignete Speicherorte befinden sich im Quelldatenobjektcache für CF_EMBEDDEDOBJECT und in den anderen Formaten im Quelldatenobjekt für CF_EMBEDSOURCE.) Wenn die Informationen nicht vorhanden sind, ist der Cache zunächst leer, wird aber bei der ersten Ausführung des Objekts gefüllt. Im neu erstellten Objekt werden keine anderen Formate zwischengespeichert.
OLERENDER_NONE Im neu erstellten Objekt soll nichts zwischengespeichert werden. Wenn die Quelle das format CF_EMBEDDEDOBJECT hat, werden alle vorhandenen zwischengespeicherten Daten, die kopiert wurden, entfernt.
OLERENDER_ASIS Wenn die Quelle das CF_EMBEDDEDOBJECT Format aufweist, muss der Cache des neuen Objekts dieselben Cachedaten wie das Quellobjekt enthalten. Für CF_EMBEDSOURCE muss im neu erstellten Objekt nichts zwischengespeichert werden. Diese Option sollte von komplexeren Containern verwendet werden. Nach diesem Aufruf rufen solche Container IOleCache::Cache und IOleCache::Uncache auf, um genau festzulegen, was zwischengespeichert werden soll. Für CF_EMBEDSOURCE wird dann auch IOleCache::InitCache aufgerufen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile ole2.h
Bibliothek Ole32.lib
DLL Ole32.dll
APIs ext-ms-win-com-ole32-l1-1-3 (eingeführt in Windows 10, Version 10.0.10240)

Weitere Informationen

Idataobject

OleErstellen