Si vous travaillez avec COM et automatisation en C/C++ (ou les anciennes versions de Delphi), vous devez utiliser VARIANT pour les paramètres que vous souhaitez faire en option. De même, les arguments facultatifs définis dans le style C++ ne sont pas pris en charge pour COM. Cela dit, pour les VARIANTES que vous devez fournir lorsque vous appelez un autre objet et que vous souhaitez spécifier des paramètres optionnels (par exemple, lorsque vous parlez à MS Word ou Excel via Automation), vous devrez initialiser ces VARIANTS avec tapez VT_ERROR et le champ Scode défini sur DISP_E_PARAMNOTFOUND. Lorsque vous recevez des appels d'autres objets capables d'omettre des paramètres (VBScript, JScript), vous devez vérifier tous vos VARIANT pour les cas où le type a été défini sur VT_ERROR et le champ de scission est DISP_E_PARAMNOTFOUND. L'équivalent .NET consiste à utiliser un objet défini sur Type.Missing pour les paramètres mappés aux paramètres optionnels COM. Le lien suivant peut être utile pour voir les deux côtés de l'histoire.
.NET4Office : Type.Missing, C#, and Word (MSDN Blog)
Tout cela est ancré dans la façon dont les anciennes versions de VB (6 et précédente) a traité des arguments optionnels. Voici un lien MS Support KB qui est assez succinct.
How to pass optional parameters when you call a function from C++ (kb238981)
Pour répondre à vos questions, il est erroné de supposer que la majorité des objets COM sont écrits en C++, comme COM est strictement sur la déclaration des interfaces et mises en page des interfaces d'une manière bien connue. Peu importe le langage ou les outils utilisés pour créer des objets COM tant qu'ils observent et respectent les dispositions des interfaces prises en charge. Enfin, vous avez raison sur le fait que COM est une méthodologie - pas tout à fait dans le sens de la configuration de l'architecture pour une application spécifique, mais en permettant de définir fortement les composants interconnectés qui peuvent constituer une application ou être disponibles à d'autres applications.