Une caractéristique importante de COM est qu'une application peut demander la création de l'objet de classe et que COM détermine quel exécutable l'implémente et le charge pour vous. Cela nécessite un bon moyen d'identifier le composant.
Vous diriez: "eh bien, pas de problème, donnez-lui simplement un nom". Le problème est, les gens ne sont pas très bons pour choisir de bons noms. Il y a tout un groupe de gars appelés "Hans" et je connais au moins un autre gars qui a mon nom exact. Il habite quelque part aux Pays-Bas, je ne sais pas qui il est.
C'est un problème, contrairement aux noms de personnes, les collisions de noms de composants sont mortelles. Vous obtiendrez le composant complètement faux chargé et votre programme va planter. Les concepteurs de COM ont donc décidé que la seule bonne solution est un ID unique au monde, un numéro qui est garanti unique dans l'univers connu et au-delà. Un GUID.
Une application COM utilise ce numéro pour demander la création de l'objet. La fonction api sous-jacente est CoCreateInstance, le premier argument est le CLSID qui est le guid qui identifie la classe.
Les gens ne sont cependant pas très bons pour se souvenir de très longs nombres. Il existe donc une méthode de sauvegarde pour identifier un composant, elle est notamment utilisée dans les langages de script. Le type d'environnement d'exécution dans lequel obtenir cette valeur guidée de manière fiable n'est pas si facile. Donc, il y a toujours un nom attaché au numéro. C'est le ProgId. Vous le passez à une fonction d'assistance généralement appelée CreateObject(). Il fait une étape supplémentaire, il utilise la fonction d'assistance CLSIDFromProgID() pour mapper le nom sur le numéro, puis appelle CoCreateInstance. Inutile de dire que cela peut parfois aller mal.
Je pense que c'est une meilleure réponse - merci. – Cheetah