gpt4 book ai didi

c++ - 回调到 COM 对象的 powershell 函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:13 26 4
gpt4 key购买 nike

很久以前我创建了一个 COM 类,它做一些事情并提供回调注册:

HRESULT RegisterCallback([in] IUnknown* callbackFunction);

callbackFunction 可以是 IDispatchICallbackHandler 类型

interface IActionCallbackHandler : IUnknown {
[id(1)] HRESULT ActionCallback(IActionCallbackData* data);
};

IDispatch 用于将 VBScript 子例程注册为回调方法例如:

Sub ProgressCallback (data)
WScript.Echo data.Message
End sub

Set myObj= CreateObject("MyClass.MyClass")
myObj.RegisterCallback GetRef("ProgressCallback")

myObj.DoSomeActions //this method will call ProgressCallback()

然而,工程师们试图摆脱 VBScript 并用 powershell 替换一切。除了回调,一切都在 powershell 中工作。所以没有任何进展,他们也无法记录任何内容。

如何在 powershell 中实现这个回调?以与 VBScript 中相同的方式引用 powershell 函数将是完美的。这样,他们仍然可以使用他们的日志记录对象等。

最佳答案

以你的 vbs 为例:

Sub ProgressCallback (data)
WScript.Echo data.Message
End sub

Set myObj= CreateObject("MyClass.MyClass")
myObj.RegisterCallback GetRef("ProgressCallback")

myObj.DoSomeActions //this method will call ProgressCallback()

你应该能够在 powershell 中这样做:

$obj = New-Object -ComObject MyClass.MyClass
$obj.RegisterCallback({param($data) $data.Message})
$obj.DoSomeActions()

如果您的目标是将它定义为一个函数(因为您将在别处重复使用它),您必须访问 Function 驱动器以获取脚本 block 定义:

function ProgressCallback
{
param($data)

$data.Message
}
$obj.RegisterCallback($Function:ProgressCallback)

关于c++ - 回调到 COM 对象的 powershell 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52520664/

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