2009-09-23 9 views
2

Mais comment COM les supporte-t-il? Est-ce que C++ les supporte? Est ignorant de moi de supposer que tout le code COM est écrit en C++? Ou COM est juste une méthodologie, un moyen d'architecturer votre application?Comment COM prend-il en charge les paramètres optionnels?

Je suis curieux. J'ai récemment écrit beaucoup d'automation COM de C# et cette question m'est venue à l'esprit.

Répondre

3

ce lien pourrait aider à répondre à votre question sur les paramètres facultatifs (la réponse est « oui », vous pouvez les faire): http://msdn.microsoft.com/en-us/library/f25e2b6b%28VS.80%29.aspx

com est une spécification binaire. vous pouvez créer techniquement un objet com (serveur) dans n'importe quelle langue. les langues de Microsoft évidemment (sinistre?) le rendent plus facile que d'autres parce qu'ils ont écrit la spec. créer un serveur com en C droit est possible ... techniquement. en réalité, c'est une entreprise gigantesque.

meilleures salutations, don

3

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.

Questions connexes