7

サードパーティ ライブラリを使用する PowerShell スクリプトを作成しています。私が使用しているオブジェクトの 1 つは、イベント ハンドラーを追加する必要があります。 イベント デリゲートは次のようになります

public delegate void TSBPGPCreateOutputStreamEvent(object Sender, 
                                                   string Filename, 
                                                   System.DateTime TimeStamp, 
                                                   ref System.IO.Stream Stream, 
                                                   ref bool FreeOnExit)

PowerShellで、私はこれをやってみました:

$reader.Add_OnCreateOutputStream( {
    param(
        $sender,
        $fileName,
        $timestamp,
        [ref]
        $stream,
        [ref]
        $freeOnExit
    )
    $stream = New-Object IO.MemoryStream
} )

しかし、次のエラー メッセージが返されます。

 Cannot convert value "
    param(
        $sender,
        $fileName,
        $timestamp,
        [ref]
        $stream,
        [ref]
        $freeOnExit
    )
$stream = New-Object IO.MemoryStream
" to type "SBPGP.TSBPGPCreateOutputStreamEvent". 
Error: "The type 'System.IO.Stream&' may not be used as a type argument."

イベントをサブスクライブするより良い方法はありますか? Stream 型を型引数として使用できないのはなぜですか? 私は何を間違っていますか?

4

2 に答える 2

9

Register-ObjectEventコマンドレットを使用する必要があります。以下を使用して、独自のシステムの例を見てください。

PS> Get-Help Register-ObjectEvent -full
于 2012-09-13T13:13:24.003 に答える
3
Add-Type -AssemblyName System.Windows.Forms
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
$form = New-Object Windows.Forms.Form
$form.add_mousedown($handler_form_mousedown)
$handler_form_Mousedown=
{
param([object]$sender, [System.EventArgs]$e)
write-host $e.x
write-host $e.y
$sender.text="if ya think your so noble answer the question"
$sender.text = "Nobles Oblige"
# PS HELP IS USELESS FOR THIS    
}

$App = $form.ShowDialog()
于 2013-09-05T01:45:09.987 に答える