設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 9360|回復(fù): 7
打印 上一主題 下一主題

VB Variant 數(shù)據(jù)類型與用戶自定義類型

[復(fù)制鏈接]

點(diǎn)擊這里給我發(fā)消息

跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2013-9-28 12:27:44 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在 VB 的標(biāo)準(zhǔn)工程的標(biāo)準(zhǔn)模塊中:
  1. Public Type EventRecord
  2.         TriTime As Date
  3.         TriType As String
  4.         CallMobile As String
  5. End Type

  6. Sub testVariant()
  7.     Dim er As EventRecord
  8.     Dim p As Variant

  9.     er.TriTime = Now()
  10.     er.TriType = “CallIn”
  11.     er.CallMobile = “13907309999”

  12.     p = er
  13. End Sub
復(fù)制代碼


這樣是有問題的。會(huì)出現(xiàn)“編譯錯(cuò)誤:只在定義在公共對象模塊中用戶定義類型能和變體類型相互轉(zhuǎn)換或傳遞給后期綁定功能。”的錯(cuò)誤。



而如果將這些代碼放在窗體模塊中:



程序編譯通不過,出現(xiàn)“編譯錯(cuò)誤:在私有對象模塊中不能定義Public的用戶定義類型。”



將用戶定義類型改為:
  1. Private Type EventRecord
復(fù)制代碼
運(yùn)行程序,同樣報(bào)第一種情況的編譯錯(cuò)誤。

新建一個(gè)類模塊,將用戶定義類型移到類模塊中,并將聲明成Public,運(yùn)行程序,同樣報(bào)錯(cuò)。與第二種情況相同。

這說明一點(diǎn),為了實(shí)現(xiàn)變體類型變量與用戶定義類型變量的相互轉(zhuǎn)換,在一個(gè)VB標(biāo)準(zhǔn)工程中,用戶類型定義放在模塊中是不行的,放在窗體或類模塊中也是不行的,窗體或類模塊都是私有的,無法找到公共對象模塊。那么,怎么做才能做到后期綁定呢?

好了,我們來添加一個(gè)ActiveX DLL工程,將:
  1. Public Type EventRecord
  2.     TriTime As Date
  3.     TriType As String
  4.     CallMobile As String
  5. End Type
復(fù)制代碼
移到這個(gè)工程的類模塊中,設(shè)置該類的Instancing屬性,該屬性確定在工程之外是否能創(chuàng)建公共類的實(shí)例,它有6種選擇,在這里我們選擇 5 – MultiUse,允許其它應(yīng)用程序創(chuàng)建該類的實(shí)例。

再回到原來的工程,設(shè)置工程的引用,添加“工程2”(就是上面的ActiveX DLL工程)。刪除工程的模塊和類模塊,只剩下窗體模塊:



運(yùn)行程序,程序能夠正常通過。

結(jié)論:當(dāng)我們要開發(fā)一個(gè)應(yīng)用程序時(shí),我們應(yīng)該將我們用到自定義類型都放到一個(gè)ActiveX DLL工程,形成公共的類型庫(TypeLibrary),供程序調(diào)用。來自群組: ACC應(yīng)用開發(fā)心得交流

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖2 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2013-9-28 14:38:39 | 只看該作者
好東西!
回復(fù)

使用道具 舉報(bào)

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2013-9-29 16:21:53 | 只看該作者
辛苦了,朱總!繼續(xù)加油!!!

點(diǎn)擊這里給我發(fā)消息

4#
發(fā)表于 2013-10-9 10:33:02 | 只看該作者
很好的技巧!
不知道有沒有別的方法...

點(diǎn)擊這里給我發(fā)消息

5#
發(fā)表于 2014-2-10 10:08:40 | 只看該作者
專心,專業(yè)。專注。。向你學(xué)習(xí)。
6#
發(fā)表于 2014-3-22 22:15:03 | 只看該作者
放到 ActiveX DLL 后, 這個(gè)自定義類型就是一個(gè)類對象,所以varaint可以轉(zhuǎn)換

應(yīng)該這里varaint引用的是其地址,通過VARAINT設(shè)置值后,其er的值應(yīng)該也會(huì)同時(shí)變,即p和er指向同地址

7#
發(fā)表于 2015-5-28 17:28:31 | 只看該作者
頂!
回復(fù)

使用道具 舉報(bào)

8#
發(fā)表于 2016-2-1 08:54:31 | 只看該作者
沒錯(cuò),是這樣的
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:30 , Processed in 0.098682 second(s), 37 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表