如何使用参数创建新的COM对象?

如何使用参数创建新的COM对象?,com,powershell-2.0,Com,Powershell 2.0,我有一个COM对象,很少有构造函数,我正在尝试创建新实例,并使用powershell 2.0将参数传递给构造函数。但我得到了这个错误:无法使用指定的命名参数解析参数集 代码如下: $paramsInfo = New-Object -ComObject 'MyObject.ObjectA' $comObj = New-Object -ComObject 'MyObject.ObjectB' -ArgumentList $paramsInfo 这个代码不起作用!!! 有帮助吗?对于COM对象

我有一个COM对象,很少有构造函数,我正在尝试创建新实例,并使用powershell 2.0将参数传递给构造函数。但我得到了这个错误:无法使用指定的命名参数解析参数集

代码如下:

$paramsInfo = New-Object -ComObject 'MyObject.ObjectA' 
$comObj = New-Object -ComObject 'MyObject.ObjectB'  -ArgumentList  $paramsInfo
这个代码不起作用!!!
有帮助吗?

对于COM对象,请尝试使用-Property哈希表而不是-ArgumentList

$comObj = new-object -com 'MyObject.ObjectB' -Property @{propToSet=$paramsInfo}

参考:

COM没有构造函数的概念。它遵循一种基于超纯接口的编程风格,实现总是隐藏的,并且您只使用接口。接口很容易跨语言运行时进行移植,实现从来都不是。许多实现COM的语言都没有构造函数的概念,它是一个OOP概念

COM对象是使用CoCreateInstance()API函数创建的,该函数是COM对象的标准。它无法将任何类型的参数传递给实际的类工厂,而实际的类工厂可以用来将参数传递给构造函数。真正的工厂是IClassFactory接口实现,超纯风格

虽然许多语言支持使其类对COM客户端可见(如.NET的[ComVisible]属性),但只会调用它们的无参数构造函数。当然是这样

如果您需要一个接受参数的工厂方法,那么只需编写自己的工厂方法。实现自己的工厂接口。对可以传递给其Create()方法的参数没有限制,如何传递给构造函数是一个不可见的实现细节:)