gpt4 book ai didi

com - 如何在 COM 对象上查询 Powershell 接口(interface)

转载 作者:行者123 更新时间:2023-12-04 04:00:00 29 4
gpt4 key购买 nike

我使用 Powershell 创建了一个 COM 对象:

$obj = new-object -com MyLib.MyObj

然后我需要查询接口(interface) "MyLib.MyInterface"在那个对象上,但我不知道如何用 PowerShell 来做。

按顺序
假设我有以下 C++ 代码
CComPtr<IInterface1> pInterface1;
CComPtr<IInterface2> pInterface2;
pInterface1->CoCreateInstance(CLSID_XXXX); //in PowerShell: $obj = new-object -com MyLib.MyObj
pInterface1->QueryInterface(IID_YYYY, &pInterface2); //how to do this in PowerShell?

我如何使用 Powershell 完成相同的工作

任何意见?

谢谢

最佳答案

作为一个实验,我创建了 $obj=new-object -com file . ("file"是 FileMoniker COM 类的 progid)。 [Runtime.InteropServices.marshal]::GetIUnknownForObject($obj)给我一个System.IntPtr在我的 Windows 2008R2 机器上。我能够将该值与 IMoniker 的 GUID 一起传递给 [Runtime.InteropServices.marshal]::QueryInterface,我得到了与从 GetIUnknownForObject 得到的相同值(即相同的指针)。所以我能够查询界面。

但是,我不确定 Powershell 有什么好处。 [Runtime.InteropServices.marshal] 中有很多其他方法可能对处理来自 PS 的 COM 感兴趣。但总的来说,在 PS 中处理 COM 对象与在 C++ 中处理它们是非常不同的。

编辑
我最近发现并验证了一种从 PS 访问某些 COM 组件的方法,这可能在这里感兴趣。 Windows SDK 带有大量 IDL 文件。如果您想访问其中之一(并且该组件未实现 IDispatch),您可以使用 MIDL 编译 IDL,然后使用 TLBIMP 创建互操作程序集。我使用 3 个 VSS 硬件提供程序接口(interface)成功地做到了这一点。

我还了解到您可以使用 [type]::GetTypeFromCLSID 从 CLSID 获取类型。然后根据组件,您可以实例化它。

关于com - 如何在 COM 对象上查询 Powershell 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409872/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com