2011-04-26 32 views
1

我在PowerShell中創建了一個COM對象:在PowerShell中,如何實現COM對象的事件處理程序?

我需要實現的事件處理程序「NewCivicAddressReport」 $ CivicFactory =新對象-ComObject LocationDisp.CivicAddressReportFactory。我嘗試這樣做:

Register-ObjectEvent $CivicFactory -EventName "NewCivicAddressReport" -Action ({ echo "haha" }) 

但它給了我"Register-ObjectEvent : Cannot register for event. An event with name 'NewCivicAddressReport' does not exist."

然後我試圖$CivicFactory.add_NewCivicAddressRerport({"haha"})

它沒有工作之一:方法調用失敗,因爲[System.__ComObject#{bf773b93-c64f-4bee-beb2-67c0b8df66e0}] doesn't contain a method named 'add_NewCivicAddressRerport'

任何人都可以告訴我如何在PowerShell中實現此事件處理程序?提前致謝。 在VBScript這很簡單,只要

Function CivicFactory_NewCivicAddressReport(report) 
    Blablabla... 
End Function 

但在PowerShell中我無法得到它的工作。

回答

1

您可能對PSEventing感興趣,它介紹.NET,COM和WMI對象事件處理。

+0

我會嘗試'$ CivicFactory | Get-Member-Type Event'來獲取你的對象可以訂閱的所有事件。 – 2011-04-26 19:40:43

0

我試過Get-Member:$CivicFactory | Get-Member -MemberType Event 但它沒有返回任何東西。

如果我在沒有指定成員類型的情況下運行Get-Member,它確實會返回它的方法和屬性。而且方法和屬性工作得很好,所以我相信這個對象是可以的。

因此,它看起來像對象的事件不被PowerShell系統識別。

但文檔指出應該實現事件處理程序NewCivicAddressReport,並且我已經在VBScript和JScript中成功完成了這一操作。

1

使用由Visual Studio生成的Interop程序集。

無論何時將COM(庫)引用添加到C#項目中,IDE都會構建一個包裝器,它使所有實體(包括事件和枚舉)都可用於.NET世界。

的包裝通常是裝在一個名爲像這樣的文件:

Interop.<COM-library-name>.dll 

注意,類名可能會有所不同。使用IL反彙編程序(ildasam.exe)來確定您必須實例化的類。

相關問題