COM对象:用户定义的类型没有定义
问题描述:
在我已经加入参考COM DLL一个VB6项目:C:\ Windows \ System32下\ locationapi.dllCOM对象:用户定义的类型没有定义
下面的代码工作得很好且对象的方法/属性可以正确访问:
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类型库(在项目菜单,选择引用,并添加引用到你的类型库)将工作
看到IDE在上面的“ListenForReports”之后插入的空格?它对你说:“这里不应该有括号,你知道你在做什么吗?” – Bob77 2011-04-29 05:19:09
正确的名称应该类似于LocationApiLib.CivicAddressReportFactory – 2011-04-30 19:46:01