VB.NET組件封裝實(shí)現(xiàn)功能體驗(yàn)
VB.NET的應(yīng)用到底能幫助我們帶來些什么呢?只有在實(shí)際應(yīng)用中才能真正的體會到它強(qiáng)大的功能。下面就先從VB.NET組件封裝來看看它的一些主要作用。從這個角度來仔細(xì)的分析一下這款編程語言的優(yōu)點(diǎn)。#t#
前幾天一直在研究如何將VB.NET組件封裝之后可以實(shí)現(xiàn)com供非托管代碼調(diào)用。上網(wǎng)查資料,查書,試驗(yàn),***測試了vb.net,c#,vc++.net 等多種語言,都沒有搞定。在論壇上發(fā)了帖子。雖然有回復(fù),但是只是給了些資料。資料看了又看,反復(fù)的研讀。照著例子一步一步地做。但總是有些地方?jīng)]有成功。正在絕望中。一個朋友給了我簡單的答案。我在高興的同時也感慨自己的愚鈍和呆笨。
原來在vs.net 2005中實(shí)現(xiàn)VB.NET組件封裝是如此的簡單。
方法如下:
新建一個項(xiàng)目,選擇Visual Basic \ Window \ 類庫,假設(shè)項(xiàng)目名為ClassLibrary1
然后 在solution manager(解決方案資源管理器)中,將新創(chuàng)建的Class1.vb文件刪除。
然后在solution manager(解決方案資源管理器)中的項(xiàng)目上點(diǎn)擊右鍵,在彈出的菜單上點(diǎn)擊添加 \ 類,在彈出的對話框中選擇com類,修改類的名稱(本例中修改為ComC.vb),后點(diǎn)擊添加按鈕。
則會看到ComC.vb的代碼如下:
- < ComClass(ComC.ClassId,
ComC.InterfaceId, ComC.EventsId)>- _ Public Class ComCClass ComC
- COM GUID#Region "COM GUID"
- ' 這些 GUID 提供此類的 COM 標(biāo)識
- ' 及其 COM 接口。若更改它們,則現(xiàn)有的
- ' 客戶端將不再能訪問此類。
- Public Const ClassId As String =
"97451265-d75d-4d5a-a39d-6c4b68f8dd99"- Public Const InterfaceId As String =
"5015b9e7-64e6-4750-8c28-5c51d968f1d6"- Public Const EventsId As String =
"1afd03f4-5974-445e-8ca2-a8e9be3432d7"- #End Region
- ' 可創(chuàng)建的 COM 類必須具有一個不帶參數(shù)的
- Public Sub New()
- ' 否則, 將不會在
- ' COM 注冊表中注冊此類,且無法通過
- ' CreateObject 創(chuàng)建此類。
- Public Sub New()Sub New()
- MyBase.New()
- End Sub
- End Class
現(xiàn)在只要在這個類中添加public 的成員即可,假如我們添加一個方法Northsnow
- < ComClass(ComC.ClassId,
ComC.InterfaceId, ComC.EventsId)>- _ Public Class ComCClass ComC
- COM GUID#Region "COM GUID"
- ' 這些 GUID 提供此類的 COM 標(biāo)識
- ' 及其 COM 接口。若更改它們,則現(xiàn)有的
- ' 客戶端將不再能訪問此類。
- Public Const ClassId As String =
"97451265-d75d-4d5a-a39d-6c4b68f8dd99"- Public Const InterfaceId As String =
"5015b9e7-64e6-4750-8c28-5c51d968f1d6"- Public Const EventsId As String =
"1afd03f4-5974-445e-8ca2-a8e9be3432d7"- #End Region
- ' 可創(chuàng)建的 COM 類必須具有一個不帶參數(shù)的
- Public Sub New()
- ' 否則, 將不會在
- ' COM 注冊表中注冊此類,且無法通過
- ' CreateObject 創(chuàng)建此類。
- Public Sub New()Sub New()
- MyBase.New()
- End Sub
- Public Sub Northsnow()Sub
Northsnow(ByVal ss As String) MsgBox(ss)- End Sub
- End Class
然后就可以編譯,編譯后,在pb中添加如下的代碼來調(diào)用這個com
- int intValue
- oleobject objOle
- objOle=create OLEObject
- intValue=objOle.
connecttonewobject
("ClassLibrary1.ComC")- objOLe.Northsnow
("I am Northsnow")
運(yùn)行這個VB.NET組件封裝的實(shí)現(xiàn)程序就會看到效果。
我在C#中沒有看到類似的com類.
現(xiàn)在這個棘手的難題解決了之后,工作可以繼續(xù)了。心理挺高興的。但是在高興之余又有一種奇怪的感覺。
VB.NET的確的很強(qiáng)。把很多復(fù)雜的東西都包裝起來幫我們實(shí)現(xiàn)。我們在享受輕松的解決難題的時候,距離底層技術(shù)卻越來越遠(yuǎn)。不知道是喜是悲。