COM-объект в VB 6: пользовательский тип не определен - PullRequest
1 голос
/ 29 апреля 2011

В проекте 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 ]

1 голос
/ 29 апреля 2011

Я не разрабатываю для Windows 7, поэтому не могу его протестировать, но я думаю, что вам нужно реализовать интерфейс ILocationEvents, а затем создать экземпляр этого класса и передать его в метод RegisterForReport интерфейса ILocation вашего Объект CivicAddressReportFactory.

Другими словами, они вообще не удосужились реализовать события, но вместо этого вы получаете обратные вызовы COM, a.k.a. «события сценария».

Это выполнимо, и требуется использовать много новых COM-библиотек, так как они накладывают жалобы на VB6 и другие хосты ActiveX. Например, вы должны делать такие глупые вещи, чтобы использовать библиотеки UPnP в XP и более поздних версиях, для асинхронных запросов с использованием объектов MSXML Helper и т. Д.

Понятно, достаточно верно. Но что вы ожидаете от Microsoft.Net?

Думайте об этом как о конкурентном преимуществе , как только вы это добьетесь. Вот что я делаю.

0 голосов
/ 29 апреля 2011

Эта строка

Public WithEvents civicfactory As LocationDisp.CivicAddressReportFactory 

будет работать, если вы добавите ссылку на библиотеку типов COM (в меню «Проект» выберите «Ссылки» и добавьте ссылку на вашу библиотеку типов)

...