我有几个构造函数的COM对象,我正在尝试创建新实例并使用powershell 2.0将参数传递给构造函数,但我收到此错误:无法使用指定的命名参数解析参数集。
这是代码:
$paramsInfo = New-Object -ComObject 'MyObject.ObjectA'
$comObj = New-Object -ComObject 'MyObject.ObjectB' -ArgumentList $paramsInfo
此代码不起作用!!! 有什么帮助吗?
答案 0 :(得分:1)
COM没有构造函数的概念。它遵循基于接口的超纯编程风格,实现始终隐藏,您只能使用接口。接口很容易跨语言运行时间移植,实现永远不会。很多实现COM的语言都没有构造函数的概念,它是一个OOP概念。
COM对象是使用CoCreateInstance()API函数创建的,COM函数是COM对象的标准factory method。它无法将任何类型的参数传递给它可用于将参数传递给构造函数的真实类工厂。真正的工厂是IClassFactory接口实现,超纯风格。
虽然许多语言都支持让COM客户端看到它们的类(比如.NET的[ComVisible]属性),但只会调用它们的无参数构造函数。必然如此。
如果您需要一个带参数的工厂方法,那么只需编写自己的参数。实现自己的工厂界面。您可以传递给其Create()方法的参数没有限制,如何将它们传递给构造函数是一个不可见的实现细节:)
答案 1 :(得分:0)
对于COM对象,请尝试使用-Property哈希表而不是-ArgumentList。
$comObj = new-object -com 'MyObject.ObjectB' -Property @{propToSet=$paramsInfo}