CComEnumImpl::Init
Sie müssen diese Methode aufrufen, bevor Sie einen Zeiger auf die Enumeratorschnittstelle zurück in allen Clients übergeben.
HRESULT Init(
T* begin,
T* end,
IUnknown* pUnk,
CComEnumFlags flags = AtlFlagNoCopy
);
Parameter
begin
Ein Zeiger auf das erste Element des Arrays, das die aufgelistet werden Elemente enthält.end
Ein Zeiger auf den Speicherort direkt über dem letzten Element des Arrays überschreitet, das die aufgelistet werden Elemente enthält.pUnk
[in] Der IUnknown Zeiger eines Objekts, die aktiv bleiben muss während der Lebensdauer des Enumerators. NULL übergeben, wenn kein solches Objekt vorhanden ist.flags
Kennzeichnet das angibt, ob der Enumerator Besitzer des Arrays ausführen oder eine Kopie erstellen soll. Mögliche Werte sind unten beschrieben.
Rückgabewert
Ein HRESULT-Standardwert.
Hinweise
Rufen Sie diese Methode nur einmal auf – initialisieren Sie den Enumerator, verwenden Sie ihn, dann werfen Sie ihn weg.
Wenn Sie Zeiger an Elemente in einem Array übergeben, das in einem anderen Objekt verwendet wird (und fordern Sie nicht den Enumerator auf, die Daten zu kopieren), können Sie den Punkparameter verwenden, um sicherzustellen, dass das Objekt und das Array, die es ist verfügbar für enthält, solange der Enumerator erforderlich sind. Der Enumerator enthält einfach einen COM-Verweis auf dem Objekt an, um es aktiv bleibt. Der COM-Verweis wird automatisch freigegeben, wenn der Enumerator zerstört wird.
Der flags-Parameter ermöglicht es Ihnen, um anzugeben, wie der Enumerator die Arrayelemente behandeln soll, die ihm übergeben werden. flags kann einen der Werte aus der CComEnumFlags-Enumeration akzeptieren, die folgenden:
enum CComEnumFlags
{
AtlFlagNoCopy = 0,
AtlFlagTakeOwnership = 2, // BitOwn
AtlFlagCopy = 3 // BitOwn | BitCopy
};
AtlFlagNoCopy bedeutet, dass die Lebensdauer des Arrays nicht vom Enumerator gesteuert wird. In diesem Fall entweder das Array ist statisch, oder das Objekt, das von pUnk identifiziert wird, ist für das Freigeben des Arrays zuständig, wenn es nicht mehr benötigt wird.
AtlFlagTakeOwnership bedeutet, dass die Zerstörung des Arrays vom Enumerator gesteuert werden soll. In diesem Fall muss das Array mit new dynamisch zugeordnet werden. Der Enumerator löscht das Array in ihrem Destruktor. In der Regel wird NULL für pUnk übergeben, obwohl Sie einen gültigen Zeiger noch führen können, wenn Sie von der Zerstörung des Enumerators aus irgendeinem Grund benachrichtigt werden müssen.
AtlFlagCopy bedeutet, dass ein neues Array erstellt werden soll, indem Sie das Array kopiert, das zu Init übergeben wird. Die neuen Lebensdauer des Arrays soll vom Enumerator gesteuert werden. Der Enumerator löscht das Array in ihrem Destruktor. In der Regel wird NULL für pUnk übergeben, obwohl Sie einen gültigen Zeiger noch führen können, wenn Sie von der Zerstörung des Enumerators aus irgendeinem Grund benachrichtigt werden müssen.
Hinweis
Der Prototyp dieser Methode gibt die Arrayelemente als an, wobei vom Typ T, in dem T als Vorlagenparameter zur Klasse definiert wurde.Dies ist der gleiche Typ, der mithilfe der COM-Schnittstellen-Methode CComEnumImpl::Next verfügbar gemacht wird.Die Auswirkungen hierfür ist, dass, anders als IEnumOnSTLImpl, diese Klasse nicht unterschiedlichen Speicher und verfügbar gemachte Datentypen unterstützt.Der Datentyp der Elemente im Array muss dem Datentyp haben, der mithilfe der COM-Schnittstelle verfügbar gemacht wird.
Anforderungen
Header: möchten