首頁 | 社區 | 博客 | 招聘 | 文章 | 新聞 | 下載 | 讀書 | 代碼
親,您未登錄哦! 登錄 | 注冊

vb.net封裝組件成com的方法

打印文章

分享到:

  前幾天一直在研究如何將.net的組件封裝成com供非托管代碼調用。上網查資料,查書,試驗,最后測試了vb.net,c#,vc++.net 等多種語言,都沒有搞定。在論壇上發了帖子。雖然有回復,但是只是給了些資料。資料看了又看,反復的研讀。照著例子一步一步地做。但總是有些地方沒有成功。正在絕望中。一個朋友給了我簡單的答案。我在高興的同時也感慨自己的愚鈍和呆笨。 

  原來在vs.net 2005中用vb來實現這個功能是如此的簡單。 

  方法如下: 

  新建一個 項目 ,選擇 Visual Basic \ Window \ 類庫 ,假設項目名為ClassLibrary1 

  然后 在 solution manager(解決方案資源管理器)中, 將 新創建的 Class1.vb 文件刪除。 

  然后 在  solution manager(解決方案資源管理器)中 的項目上點擊右鍵 ,在彈出的菜單上 點擊 添加 \ 類 ,在彈出的對話框中選擇 com類 ,修改類的名稱(本例中修改為ComC.vb),后點擊 添加 按鈕。 

  則會看到ComC.vb的代碼如下: 

  <ComClass(ComC.ClassId, ComC.InterfaceId, ComC.EventsId)> _ 

  Public Class ComCClass ComC 

  COM GUID#Region "COM GUID" 

  ' 這些 GUID 提供此類的 COM 標識 

  ' 及其 COM 接口。若更改它們,則現有的 

  ' 客戶端將不再能訪問此類。 

  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 

  ' 可創建的 COM 類必須具有一個不帶參數的 Public Sub New() 

  ' 否則, 將不會在 

  ' COM 注冊表中注冊此類,且無法通過 

  ' CreateObject 創建此類。 

  Public Sub New()Sub New() 

  MyBase.New() 

  End Sub 

  End Class 

  現在只要在這個類中添加 public 的成員即可 ,假如我們添加一個 方法 Northsnow 

  <ComClass(ComC.ClassId, ComC.InterfaceId, ComC.EventsId)> _ 

  Public Class ComCClass ComC 

  COM GUID#Region "COM GUID" 

  ' 這些 GUID 提供此類的 COM 標識 

  ' 及其 COM 接口。若更改它們,則現有的 

  ' 客戶端將不再能訪問此類。 

  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 

  ' 可創建的 COM 類必須具有一個不帶參數的 Public Sub New() 

  ' 否則, 將不會在 

  ' COM 注冊表中注冊此類,且無法通過 

  ' CreateObject 創建此類。 

  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中添加如下的代碼來調用這個com 

  int intValue 

  oleobject objOle 

  objOle=create OLEObject 

  intValue=objOle.connecttonewobject("ClassLibrary1.ComC") 

  objOLe.Northsnow("I am Northsnow") 

  運行這個程序就會看到效果。 

  我在C#中沒有看到類似的com類. 

  現在這個棘手的難題解決了之后,工作可以繼續了。心理挺高興的。但是在高興之余又有一種奇怪的感覺。 

  VS.net的確的很強。把很多復雜的東西都包裝起來幫我們實現。我們在享受輕松的解決難題的時候,距離底層技術卻越來越遠。不知道是喜是悲。

本欄文章均來自于互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業或者其他目的。( Pfan.cn )

編程愛好者論壇

本欄最新文章

黑龙江p62彩票开奖