2011-04-29 68 views
1

在我已經加入參考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個工作 - 事件處理程序永遠不會被調用。

在此先感謝!

+0

看到IDE在上面的「ListenForReports」之後插入的空格?它對你說:「這裏不應該有括號,你知道你在做什麼嗎?」 – Bob77 2011-04-29 05:19:09

+0

正確的名稱應該類似於LocationApiLib.CivicAddressReportFactory – 2011-04-30 19:46:01

回答

1

我不在Windows 7上開發,所以我無法測試它,但我認爲您需要實現ILocationEvents接口,然後創建此類的一個實例並將其傳遞給CivicAddressReportFactory對象的ILocation接口的RegisterForReport方法。

換句話說,他們根本沒有執行任何事件,而是獲得COM回調,也就是「腳本事件」。

這是可行的,並且需要使用很多新的COM庫,因爲他們把斜視放在VB6和其他ActiveX主機上。例如,你必須做這樣的愚蠢事情才能在XP和更高版本中使用UPnP庫,使用MSXML Helper對象進行異步請求等。

可以理解,足夠正確。但是,您對Microsoft.Net有什麼期望?

認爲它是競爭優勢一旦你得到它的工作。我就是做這個的。

0

此行

Public WithEvents civicfactory As LocationDisp.CivicAddressReportFactory 

如果添加了一個參考COM類型庫(在項目菜單,選擇引用,並添加引用到你的類型庫)將工作

+0

我做到了這一點:在Project | References中添加了指向C:\ Windows \ System32 \ LocationApi.dll的「LocationApi 1.0類型庫」。 – Charlie 2011-04-29 03:51:17

+0

我想這是正確的COM類型庫,它是WinPlatformSDK v7.1安裝的一部分。 – Charlie 2011-04-29 03:54:03

相關問題