Обратный вызов к функции powershell COM-объекта - PullRequest
0 голосов
/ 26 сентября 2018

Давным-давно я создал класс COM, который делает некоторые вещи, а также обеспечивает регистрацию обратного вызова:

HRESULT RegisterCallback([in] IUnknown* callbackFunction);

callbackFunction может иметь тип IDispatch или ICallbackHandler

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?Было бы идеально ссылаться на функцию powershell так же, как в VBScript.Таким образом, они могли бы по-прежнему использовать свои объекты регистрации и т. Д.

1 Ответ

0 голосов
/ 26 сентября 2018

Пример вашего 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, чтобы получить определение блока скрипта:

function ProgressCallback
{
    param($data)

    $data.Message
}
$obj.RegisterCallback($Function:ProgressCallback)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...