2010-07-11 9 views
1

J'ai un objet COM avec peu de constructeurs, j'essaie de créer une nouvelle instance et de passer des paramètres au constructeur en utilisant powershell 2.0, mais j'obtiens cette erreur: Le jeu de paramètres ne peut pas être résolu en utilisant les paramètres spécifiés.Comment créer un nouvel objet com avec des paramètres en utilisant powerhsell?

Voici le code:

$paramsInfo = New-Object -ComObject 'MyObject.ObjectA' 
$comObj = New-Object -ComObject 'MyObject.ObjectB' -ArgumentList $paramsInfo 

Ce code ne fonctionne pas !!! Toute aide?

Répondre

1

COM n'a pas de concept d'un constructeur. Il s'ensuit un style de programmation hyper-pur basé sur l'interface, l'implémentation est toujours cachée et vous ne travaillez qu'avec des interfaces. Les interfaces sont très faciles à rendre portables dans toutes les langues, l'implémentation ne l'est jamais. Beaucoup de langages qui implémentent COM n'ont pas de notion de constructeur, c'est un concept de POO.

Les objets COM sont créés avec la fonction API CoCreateInstance(), le factory method standard pour les objets COM. Il n'a aucun moyen de transmettre n'importe quel type d'arguments à l'usine de classe réelle qu'il pourrait utiliser pour passer des arguments au constructeur. La véritable usine est l'implémentation de l'interface IClassFactory, style hyper-pur.

Alors que de nombreux langages prennent en charge la visibilité de leurs classes pour les clients COM (comme l'attribut [ComVisible] de .NET), seul leur constructeur sans paramètre sera jamais appelé. Nécessairement,

Si vous avez besoin d'une méthode usine qui prend des arguments, il vous suffit d'écrire les vôtres. Implémentez votre propre interface d'usine. Aucune restriction sur les arguments que vous pouvez passer à sa méthode Create(), comment vous les passez au constructeur est un détail d'implémentation invisible :)