在VB6项目中,我添加了对COM dll的参考:c:windowssystem32locationapi.dll
下面的代码工作得很好,对象的方法/属性可以正确访问:
Public civicfactory
Set civicfactory = CreateObject("LocationDisp.CivicAddressReportFactory")
然而,它的事件不起作用-我无法捕获它们。我想我需要像这样声明对象:
Public WithEvents civicfactory As LocationDisp.CivicAddressReportFactory
但是这给了我错误"用户定义类型未定义"在这一行。
有谁能告诉我为什么第一个代码工作得很好?
因为我的目的是让事件处理程序工作,你能指出我的代码中任何错误或缺失的东西吗?
Public civicfactory
Private Sub civicfactory_NewCivicAddressReport(report)
MsgBox "New civic address report arrived"
DisplayCivic (report)
End Sub
Set civicfactory = CreateObject("LocationDisp.CivicAddressReportFactory")
civicfactory.ListenForReports (1000)
类似的代码在VBScript中工作,但我不能让它在VB 6中工作-事件处理程序从未被调用。
提前感谢!
我没有在Windows 7上开发,所以我不能测试它,但我认为你需要实现ILocationEvents接口,然后创建这个类的实例,并将其传递给CivicAddressReportFactory对象的ILocation接口的RegisterForReport方法。
换句话说,他们根本不需要实现事件,而是得到COM回调,也就是。"脚本事件。"
这是可行的,并且需要使用许多新的COM库,因为它们将斜视放在VB6和其他ActiveX主机上。例如,你必须做这样愚蠢的事情来使用XP和更高版本的UPnP库,使用MSXML Helper对象进行异步请求等。
应该受到谴责,这是真的。但是你对Microsoft.Net有什么期望呢?把它想象成竞争优势一旦你解决了它。
这一行
Public WithEvents civicfactory As LocationDisp.CivicAddressReportFactory
如果您向COM类型库添加引用,将工作(在Project菜单上,选择References,并向您的typelib添加引用)