几天前,我们从供应商处收到了这个'新'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
答案 0 :(得分:3)
对我而言,您似乎正在尝试使用该调用获取COM对象项。可能你只需要使用COM来获取属性,你试过$resultText = $resultSet.pb_resulttext
吗?
否则,我会在Get-Member
上使用好的$resultSet
(也许$resultText
)
答案 1 :(得分:0)
您可能需要知道结果对象的界面才能获得所需的值。尝试使用Windows SDK中的 OleView.exe 来浏览库的界面,包括colGeneric
和clsGeneric
的界面。这应该为您提供有关Item()
实际返回的类型的关键信息。