在 VB 的標(biāo)準(zhǔn)工程的標(biāo)準(zhǔn)模塊中: Public Type EventRecord TriTime As Date TriType As String CallMobile As String End Type Sub testVariant() Dim er As EventRecord Dim p As Variant er.TriTime = Now() er.TriType = “CallIn” er.CallMobile = “13907309999” p = er End Sub 復(fù)制 代碼 這樣是有問(wèn)題的。會(huì)出現(xiàn)“編譯錯(cuò)誤:只在定義在公共對(duì)象模塊中用戶(hù)定義類(lèi)型能和變體類(lèi)型相互轉(zhuǎn)換或傳遞給后期綁定功能!钡腻e(cuò)誤。 而如果將這些代碼放在窗體模塊中: 程序編譯通不過(guò),出現(xiàn)“編譯錯(cuò)誤:在私有對(duì)象模塊中不能定義Public的用戶(hù)定義類(lèi)型! 將用戶(hù)定義類(lèi)型改為: Private Type EventRecord 復(fù)制代碼 運(yùn)行程序,同樣報(bào)第一種情況的編譯錯(cuò)誤。 新建一個(gè)類(lèi)模塊,將用戶(hù)定義類(lèi)型移到類(lèi)模塊中,并將聲明成Public,運(yùn)行程序,同樣報(bào)錯(cuò)。與第二種情況相同。 這說(shuō)明一點(diǎn),為了實(shí)現(xiàn)變體類(lèi)型變量與用戶(hù)定義類(lèi)型變量的相互轉(zhuǎn)換,在一個(gè)VB標(biāo)準(zhǔn)工程中,用戶(hù)類(lèi)型定義放在模塊中是不行的,放在窗體或類(lèi)模塊中也是不行的,窗體或類(lèi)模塊都是私有的,無(wú)法找到公共對(duì)象模塊。那么,怎么做才能做到后期綁定呢? 好了,我們來(lái)添加一個(gè)ActiveX DLL工程,將: Public Type EventRecord TriTime As Date TriType As String CallMobile As String End Type 復(fù)制代碼 移到這個(gè)工程的類(lèi)模塊中,設(shè)置該類(lèi)的Instancing屬性,該屬性確定在工程之外是否能創(chuàng)建公共類(lèi)的實(shí)例,它有6種選擇,在這里我們選擇 5 – MultiUse,允許其它應(yīng)用程序創(chuàng)建該類(lèi)的實(shí)例。 再回到原來(lái)的工程,設(shè)置工程的引用,添加“工程2”(就是上面的ActiveX DLL工程)。刪除工程的模塊和類(lèi)模塊,只剩下窗體模塊: 運(yùn)行程序,程序能夠正常通過(guò)。 結(jié)論 :當(dāng)我們要開(kāi)發(fā)一個(gè)應(yīng)用程序時(shí),我們應(yīng)該將我們用到自定義類(lèi)型都放到一個(gè)ActiveX DLL工程,形成公共的類(lèi)型庫(kù)(TypeLibrary),供程序調(diào)用。