VB 6中的COM对象:未定义用户定义的类型

时间:2011-04-29 00:19:29

标签: events object com vb6 event-handling

在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中运行 - 事件处理程序永远不会被调用。

提前致谢!

2 个答案:

答案 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类型库的引用,

将起作用(在“项目”菜单上,选择“引用”,并添加对类型库的引用)