Fonctions d’assistance pour la création d’instances

Dans les versions précédentes de COM, le mécanisme principal utilisé pour créer une instance d’objet était la fonction CoCreateInstance . Cette fonction encapsule le processus de création d’un objet de classe, à l’aide de cette fonction pour créer une nouvelle instance et libérer l’objet de classe. Une autre fonction de ce type est le OleCreateplus spécifique, le programme d’assistance de document composite OLE qui crée un objet de classe et récupère un pointeur vers un objet demandé.

Pour faciliter le processus de création d’instance sur des systèmes distribués, COM a introduit quatre nouveaux mécanismes de création d’instance importants :

Un moniker de classe vous permet d’identifier la classe d’un objet et est généralement utilisé avec un autre moniker, comme un moniker de fichier, pour indiquer l’emplacement de l’objet. Cela vous permet d’effectuer une liaison à un objet et de spécifier le serveur qui doit être lancé pour cet objet. Les monikers de classes peuvent également être composés à droite des monikers qui prennent en charge la liaison à l’interface IClassActivator . Pour plus d’informations, consultez monikers de classes.

CoCreateInstanceEx étend CoCreateInstance pour permettre de créer un objet unique non initialisé associé au CLSID donné sur une machine distante spécifiée. En outre, au lieu de demander une seule interface et d’obtenir un seul pointeur vers cette interface, CoCreateInstanceEx permet d’interroger plusieurs interfaces et (si disponibles) de recevoir des pointeurs vers ces interfaces en un seul aller-retour, ce qui permet de réduire le nombre d’allers-retours entre les machines. Cela peut rendre l’interaction des objets à distance bien plus efficace. Pour ce faire, la fonction utilise un tableau de structures _ Qi multiples .

La création d’un objet via CoCreateInstanceEx requiert toujours que l’objet soit initialisé via un appel à l’une des interfaces d’initialisation (telle que IPersistStorage :: Load). Les fonctions d’assistance CoGetInstanceFromFile et CoGetInstanceFromIStorage encapsulent à la fois la puissance de création d’instance de CoCreateInstanceEx et l’initialisation, la première d’un fichier et la dernière à partir d’un stockage.

Création d’un objet à l’aide d’un objet de classe