在VB6项目中,我添加了对COM dll的引用:c:\ windows \ system32 \ locationapi.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中运行 - 事件处理程序永远不会被调用。
提前致谢!
答案 0 :(得分:1)
我没有在Windows 7上开发,所以我无法测试它,但我认为您需要实现ILocationEvents接口,然后创建此类的实例并将其传递给您的ILocation接口的RegisterForReport方法CivicAddressReportFactory对象。
换句话说,他们根本不打算实现事件,而是获得COM回调,a.k.a。“脚本事件。”
这是可行的,并且需要使用许多新的COM库,因为它们将斜视放在VB6和其他ActiveX主机上。例如,你必须做这样的愚蠢的事情来使用XP及更高版本中的UPnP库,使用MSXML Helper对象等的异步请求。
可理解,真实。但是你对Microsoft.Net的期望是什么?
一旦你得到它,就把它想象成竞争优势。这就是我的工作。
答案 1 :(得分:0)
这一行
Public WithEvents civicfactory As LocationDisp.CivicAddressReportFactory
如果添加对COM类型库的引用,将起作用(在“项目”菜单上,选择“引用”,并添加对类型库的引用)