2011-04-26 30 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)来确定您必须实例化的类。

相关问题