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

标签 c++ powershell callback com

很久以前我创建了一个 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/

相关文章:

C++/Win32 枚举属于我的进程的窗口并关闭它们

c++ - 我需要混合 C++ 代码和 Objective-C 代码的帮助

powershell - 在Powershell中需要有关INI文件的帮助

Powershell 脚本 - 脚本 - 我如何禁用它

sql - foreach 和 do while 用于构建插入查询

javascript - Nodejs Mysql回调中的回调

c++ - 将 WindowClass 更改为全屏

用于数值优化的 C 回调函数

c++ - 如何将某个类的指针方法转换为指针函数?

c++ - 将 DLL C++ 类库移植到 Visual Studio 的问题