CComEnumImpl::Init
Vous devez appeler cette méthode avant de passer un pointeur vers l'interface d'énumérateur à tous les clients.
HRESULT Init(
T* begin,
T* end,
IUnknown* pUnk,
CComEnumFlags flags = AtlFlagNoCopy
);
Paramètres
begin
Pointeur vers le premier élément du tableau contenant les éléments à énumérer.end
Pointeur vers l'emplacement immédiatement au delà de le dernier élément du tableau contenant les éléments à énumérer.pUnk
[in] Le pointeur d' IUnknown d'un objet qui doit rester actif pendant la durée de vie de l'énumérateur. Exécutez NULL si aucun objet n'existe.flags
Signale spécifier si l'énumérateur doit prendre la propriété du tableau ou faire une copie. Les valeurs possibles sont décrites ci-dessous.
Valeur de retour
Une valeur standard d' HRESULT .
Notes
Appelez uniquement cette méthode une fois — initialisez l'énumérateur, utilisez -le, puis jetez- le.
Si vous passez des pointeurs vers les éléments d'un tableau contenue dans un autre objet (et vous ne demandez pas à l'énumérateur de copier les données), vous pouvez utiliser le paramètre punk pour garantir que l'objet et la matrice qu'elle se maintient sont disponibles pour tant que l'énumérateur a besoin. L'énumérateur contient simplement une référence COM sur l'objet pour le suivi actif. La référence COM est automatiquement libérée lorsque l'énumérateur est détruit.
Le paramètre d' flags vous permet de spécifier comment l'énumérateur doit traiter les éléments de tableau passés à celui-ci. flags peut prendre l'une des valeurs de l'énumération de CComEnumFlags illustrée ci-dessous :
enum CComEnumFlags
{
AtlFlagNoCopy = 0,
AtlFlagTakeOwnership = 2, // BitOwn
AtlFlagCopy = 3 // BitOwn | BitCopy
};
AtlFlagNoCopy signifie que la durée de vie du tableau n'est pas activée par l'énumérateur. Dans ce cas, ou le tableau sera statique ou l'objet identifié par pUnk sera chargé de libérer le tableau lorsqu'il n'est plus nécessaire.
AtlFlagTakeOwnership signifie que la destruction du tableau doit être contrôlée par l'énumérateur. Dans ce cas, le tableau doit avoir été allouée dynamiquement à nouveau. L'énumérateur supprimera tableau dans son destructeur. En général, vous passeriez NULL pour pUnk, bien que vous puissiez encore passer un pointeur valide si vous devez être averti de la destruction de l'énumérateur pour une raison quelconque.
AtlFlagCopy signifie qu'un nouveau tableau doit être créée en copiant tableau passé à Init. De la nouvelle la durée de vie tableau doit être contrôlée par l'énumérateur. L'énumérateur supprimera tableau dans son destructeur. En général, vous passeriez NULL pour pUnk, bien que vous puissiez encore passer un pointeur valide si vous devez être averti de la destruction de l'énumérateur pour une raison quelconque.
Notes
Le prototype de cette méthode spécifie les éléments de tableau comme étant du type T, où T a été défini en tant que paramètre de modèle à la classe.Il s'agit du même type qui est exposé au moyen de la méthode CComEnumImpl::Nextd'interface COM.La conséquence de cela est que, contrairement à IEnumOnSTLImpl, cette classe ne prend pas en charge la mémoire différente et les types de données exposés.Le type de données d'éléments du tableau doit être le même que le type de données exposées par l'intermédiaire de l'interface COM.
Configuration requise
Header: atlcom.h