几天前,我们从供应商处收到了这个用于我们业务应用程序的“新”COM 对象 dll(为什么不是 .NET 超出了我的能力)。由于极度缺乏文档(没有关于如何将 COM 对象集成到现有系统的示例或说明),我们一直在努力将其集成到我们现有的基础设施中。
这里我尝试使用Powershell访问COM对象类中名为“API”的方法并读取它返回的结果。该方法用于根据我们想要执行的操作调用各种 API。任何给定 API 的参数都作为对象数组传入。返回的值存储在名为
colGeneric
的自定义类型中,它本质上是一个具有键/值对的数组(具有自定义类型 clsGeneric
)。在本例中,它返回两对 - pb_result
和 pb_resulttext
。
$comClass = new-object -comObject VendorCOM.VendorClass
$APIName = "SomeAPI"
$ArrayOfParamsNeededByAPI = 12345, "ABC", "2011-08-01"
$resultSet = $comClass.API([REF] $APIName, [REF] $ArrayOfParamsNeededByAPI)
$resultText = $resultSet.Item([ref] "pb_resulttext")
当我尝试打印
$clsGenObjResultText
时,它显示为System.__ComObject
。我知道它是一个字符串,但到目前为止尝试转换为字符串失败。这是我尝试过的一件事:
[System.Convert]::ToString($resultText)
它不起作用,因为它仍然返回
System.__ComObject
。不确定我在这里是否有意义,但我只需要字符串形式的结果文本。
更新感谢本网站的勤奋人士,上述问题的正确解决方案是将代码片段中的最后一条语句替换为:
$resultText = $resultSet.Item([ref] "pb_resulttext").Value
对我来说,您似乎正在尝试通过该调用获取 COM 对象 item 。可能你只需要使用COM来获取属性,你尝试过吗
$resultText = $resultSet.pb_resulttext
?
否则,我会在
Get-Member
上使用好的 ol'e $resultSet
(也许还有 $resultText
)
您可能需要知道结果对象的接口才能获取您想要的值。尝试使用 Windows SDK 中的 OleView.exe 来探索该库的接口,包括
colGeneric
和 clsGeneric
的接口。这应该为您提供有关 Item()
实际返回的类型的关键信息。