【问题标题】:How to create new COM object with parameters?如何使用参数创建新的 COM 对象?
【发布时间】:2019-08-23 20:31:32
【问题描述】:

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

这是代码:

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

此代码不起作用! 有什么帮助吗?

【问题讨论】:

    标签: com powershell-2.0


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      参考:http://technet.microsoft.com/en-us/library/dd315334.aspx

      【讨论】:

        猜你喜欢
        • 2018-03-13
        • 1970-01-01
        • 2013-04-10
        • 1970-01-01
        • 2017-05-23
        • 1970-01-01
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        相关资源
        最近更新 更多