.NET組件和COM組件之間的相互操作方法-創(chuàng)新互聯(lián)

.NET技術是微軟大力推廣的下一代平臺技術,自從.NET技術架構Beta2版本的正式發(fā)布,此項技術也逐漸走向成熟和穩(wěn)定。按照微軟的平臺系統(tǒng)占有 率,我們不難想象得到,在未來的一兩年內.NET技術必定會勢如破竹一般的登上主流的技術平臺,而一個新的技術平臺得以快速發(fā)展的最重要的前提是:他不會 徹底的摒棄以前的技術,這一點對于.NET技術來說指的就是COM/COM+技術了。 
    一般來說,在IT技術界以及硬件產業(yè),技術的更新?lián)Q代速度非常得驚人,而慣例是所有的新技術都會遵循向下兼容的原則,但是.NET技術不僅僅做到了這一 點,.NET甚至實現(xiàn)了相互之間的各自調用,這一點是非常難能可貴的。也就是說,不但我們可以在.NET組件中調用COM組件,同時也可以在COM組件中 正常的調用.NET組件。這點帶來的好處是顯而易見的,一方面我們可以保持現(xiàn)有的技術資源,另一方面,在現(xiàn)有資源中可以利用.NET所帶來的各種新技術。 
    在開始之前我們先來看一下.NET組件和我們目前常使用的COM組件之間有何不同之處吧。 
    .NET組件可以分為兩大類:共享的.NET組件和私有的.NET組件。 
    共享的.NET組件需要通過標準公開關鍵字密碼技術來保證自身的唯一性,在這一點上面比較類似于COM的全球唯一ID號碼GUID。但是,我們在可能的情 況下應當盡量避免使用共享的.NET組件,因為這樣將會有可能再一次的陷入目前在視窗系統(tǒng)下長期困擾開發(fā)人員的“DLL地獄”。 
    私有的.NET組件是我們將會經常使用的.NET組件方式,在這種方式之下,我們發(fā)布.NET組件需要做的只是簡單的進行拷貝操作就可以了,仿佛回到了遠古的DOS時代了,在也不必關心紛繁復雜的系統(tǒng)注冊表了,也不必擔心DLL的版本被覆蓋等等的問題了。 
    而COM組件是微軟曾經力推了很多年的一種代碼復用的技術框架,在這些年里也得到了極大的發(fā)展和應用,但它的弊端卻也日益明顯,我們不得不面對眾多的 COM組件之間的版本控制和令人恐怖的DLL地獄,還有注冊表、GUID等等。在我們安裝一個軟件的同時,也帶來了大量的我們所未知的版本繁多的 COM組 件到我們的操作系統(tǒng)中。 
    但是,COM組件的技術優(yōu)勢也是明顯的,在很大的程度上實現(xiàn)了Windows平臺下的代碼復用,所以我們才會提出這樣的一個話題,如何才能在.NET技術日臻成熟的情況下,保護和利用已經存在的大量的采用COM技術的軟件和產品呢? 
    下面我們就探討一下,如何實現(xiàn).NET組件和COM組件之間的相會調用和操作。 
    首先,我們來看看在現(xiàn)有的COM組件中如何調用.NET編寫的組件吧:
在這里我們使用C#編寫一個最簡單的組件,僅僅實現(xiàn)返回一個字符串,詳細的代碼如下: 
    在上面的.NET組件當中我們實現(xiàn)了一個類成員:say。他的用途是簡單的返回一段字符串。 
    切換到MS-DOS命令行下面,運行:
C:\>csc /t:library /out ClassLibrary1.DLLClassLibrary1.cs 
    上面的編譯器參數(shù)/t:library 告訴C#編譯器我們現(xiàn)在是在建立一個庫應用程序。這樣,我們就得到了一個名稱為ClassLibrary1.DLL的.NET組件了。 
    但是想要在現(xiàn)有的COM組件中使用這個組件,我們還有進行如下步驟: 
    切換到MS-DOS命令行下面,運行:

在大東等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網站設計制作、網站設計 網站設計制作按需制作網站,公司網站建設,企業(yè)網站建設,成都品牌網站建設,全網整合營銷推廣,外貿營銷網站建設,大東網站建設費用合理。

C:\>regasm out ClassLibrary1.DLL /regfile:ClassLibrary1.reg 
    上面的命令行是注冊我們的.NET組件,并且產生了一個備用的注冊表文件。大家一定會記得在以前我們的win9x/NT/2000下面注冊COM組件使用的命令是:
regsvr32 c:\test.dll 
    在.NET下面,注冊.NET組件就需要上面的regasm命令了,值得注意的是,這個方法僅僅是為了可供COM組件來調用,.NET本身之間相互調用組件是不需要任何注冊的! 
    還沒有結束呢,接下來我們需要:
切換到MS-DOS命令行下面,運行:
C:\>tlbExp ClassLibrary1.dll /out:ClassLibrary1.tlb
上面的命令行表示將會產生一個.NET組件的類型庫,目的是為了我們在COM組件中進行提前綁定操作。
好了,接下來我們就可以在自己的基于目前COM技術的代碼中方便的使用上面我們使用C#編寫的.NET組件了。在這里,我們使用VB6.0編寫一個小小的 測試代碼,在開始之前我們需要在VB的集成環(huán)境中使用菜單中的“引用”選項,選擇我們剛才產生的類型庫文件ClassLibrary1.tlb。
VB測試的代碼如下:
Private Sub Form_Load()
Dim test As New ClassLibrary1.hello
Dim str As String
str = test.say("dddd")
MsgBox str
End Sub
接下來,我們就來看看,如何在.NET組件中使用目前存在的COM組件吧。
對于.NET來講,使用COM組件要想對簡單一些。.NET在設計之初就考慮到了如何方便的利用現(xiàn)有的各種技術資源,這也是微軟的一貫作風,.NET的強 大之處也可見一斑。.NET提供了大量的類庫來方便的實現(xiàn)同COM的相互操作,其中很重要的一個名稱空間就是: System.Runtime.InteropServices。通過這個名稱空間的名字我們也可以從字面上看出,“互操作服務”。 System.Runtime.InteropServices這個名稱空間提供了一系列的類來對COM對象進行操作。
下面的例子中,我們來調用一下系統(tǒng)自帶的Win32函數(shù)MessageBoxA,這個函數(shù)位于系統(tǒng)的COM組件user32.dll當中,我們調用的代碼如下:
using System;
using System.Runtime.InteropServices;
class Test
{
[DllImport("user32.dll")]
public static extern int MessageBoxA(inthWnd,string strMsg,string strCaption,intnType);
public static void Main()
{
int myMsg;
myMsg=MessageBoxA(0,"Hello!","test",0);
}
}
切換到MS-DOS命令行下面,運行:
C:\>csc Test.cs
編譯完畢我們的C#應用程序之后,直接運行就可以看到對話框了!
需要注意的是,在調用COM組件之前,我們需要在.NET程序中引用名稱空間:System.Runtime.InteropServices。因為我們需要使用這個名稱空間所提供的一個方法:DllImport。
怎么樣,在.NET中使用COM組件是非常的方便的吧。上面是我們調用的系統(tǒng)本身自帶的DLL組件,同樣的,也可以使用這種方法來調用我們自己使用VB/VC編寫的COM組件。

好了,我們已經探討完了如何在.NET和COM之間相互操作了,我們也很顯然的看到了.NET技術的強大,現(xiàn)在越早掌握.NET技術就會在未來越容易的占領領先的位置,讓我們共同努力掌握強大的.NET平臺技術吧。
(以上程序在Windows2000 server+VS.NET Beta2下測試通過)
----------------------
相關知識
以下是com的概念 
什么是com
Components   Object   Model   (COM)   是軟件組件互相通訊的一種方式。它是一種二進制和網絡標準,允許任意兩個組件互相通訊,而不管它們是在什么計算機上運行(只要計算機是相連的),不管各計 算機運行的是什么*作系統(tǒng)(只要該*作系統(tǒng)支持   COM),也不管該組件是用什么語言編寫的。COM   還提供了位置透明性:當您編寫組件時,其他組件是進程內   DLL、本地   EXE   還是位于其他計算機上的組件,對您而言都無所謂。(當然會有性能區(qū)別,但是,即使改變了其他組件的位置,您也不必重新編寫什么,這是關鍵所在。)
COM   是基于對象的——但是這種對象概念與您熟悉的   C++   或   Visual   Basic   中的對象不太一樣。(順便說一下,“對象”和“組件”幾乎是同一個東西。GUI   醫(yī)生在談論應用程序的結構時愿意說成“組件”,而在談論實現(xiàn)時愿意說成是“對象”)
首先,COM   對象被很好地封裝起來。您無法訪問對象的內部實現(xiàn)細節(jié);您無法知道對象使用了什么數(shù)據(jù)結構。實際上,對象的封裝是如此的嚴密,以致于   COM   對象通常被描繪為盒子。圖   1   描繪了一個完全封裝的對象。請注意,實現(xiàn)細節(jié)是如何向您隱藏的。
Windows   2000中的 Component   Services是企業(yè)級應用中的非常重要的一部分,它為那些基于web的、分布式的應用程序提供了幾乎所有需要的功能。盡管 COM+服務起初只是被設計 用來為COM組件提供服務的,但是如果.NET組件也能夠使用COM+服務的話,那將會是一件很好的事。因為COM+能夠為組件提供很多服務如對象緩沖, 資源共享,給予角色的安全機制和分布式事務處理等。
概括地說,COM具有如下一些優(yōu)越性:
編程技術難度和工作量降低,開發(fā)周期變短,開發(fā)成本降低。一般編程人員只須根據(jù)應用功能要求選用合適的組件,而不必事無巨細都自己動手去完成。組件模塊將編程的技術難度和工作量在人員個體和時間上進行了分攤。
可以實現(xiàn)分層次的編程,從而促進了軟件的專業(yè)化生產。專業(yè)人員可以開發(fā)出具有很強專業(yè)性的軟件組件,這樣既保證了普通的編程應用人員能夠完成所需要的應用開發(fā),又不至于降低使用的性能。應用人員不便實現(xiàn)的組件模塊可以讓專業(yè)人員定做。
促進組件市場的豐富,大限度地滿足了各種應用需求,定制特定的軟件模塊變得相當容易。
軟件的復用率提高,使軟件的使用效率得到提高并延長了使用壽命。組件編程體系使大量的編程問題局部化了,使軟件的更新和維護變得快速和容易,軟件的成本大大降低。

什么是COM?
2007-07-30 23:33
什么是COM?
    所謂 COM(Componet Object Model,組件對象模型),是一種說明如何建立可動態(tài)互變組件的規(guī)范,此規(guī)范提供了為保證能夠互操作,客戶和組件應遵循的一些二進制和網絡標準。通過這 種標準將可以在任意兩個組件之間進行通信而不用考慮其所處的操作環(huán)境是否相同、使用的開發(fā)語言是否一致以及是否運行于同一臺計算機。
COM的優(yōu)點?
      首先:用戶一般希望能夠定制所用的應用程序,而組件技術從本質上講就是可被定制的,因而用戶可以用更能滿足他們需要的某個組件來替換原來的那個。其次,由 于組件是相對應用程序獨立的部件,我們可以在不同的程序中使用同一個組件而不會產生任何問題,軟件的可重用性將大大的得到增強。第三,隨著網絡帶寬及其重 要性的提高,分布式網絡應用程序毫無疑問的成為軟件市場上越來越重要的買點。組件價構可以使得開發(fā)這類應用程序的過程得以簡化。
什么是COM+?
      COM+并不是COM的簡單升級,COM+的底層結構仍然以COM為基礎,它幾乎包容了COM的所有內容,COM+綜合了COM、DCOM和MTS這些技 術要素,它把COM組件軟件提升到應用層而不再是底層的軟件結構,它通過操作系統(tǒng)的各種支持,使組件對象模型建立在應用層上,把所有組件的底層細節(jié)留給操 作系統(tǒng),因此,COM+與操作系統(tǒng)的結合更加緊密。
      COM+不再局限于COM的組件技術,它更加注重于分布式網絡應用的設計和實現(xiàn)。COM+繼承了COM幾乎全部的優(yōu)勢,同時又避免了COM實現(xiàn)方面的一些 不足,把COM、DCOM和MTS的編程模型結合起來,繼承了它們的絕大多數(shù)特性,在原有的特性上增加了新的功能。
COM+的新的優(yōu)點?
      以下列出COM+的幾個主要特性:
      COM+不僅繼承了COM所有的優(yōu)點,而且還增加了一些服務,比如隊列服務、負載平衡、內存數(shù)據(jù)庫、事件服務等。
  隊列服務對于分布式應用非常有意義,特別是在現(xiàn)在網絡速度很慢的情況下,這種機制可以保證應用系統(tǒng)能夠可靠地運行。在應用系統(tǒng)包含大量節(jié)點但服務器又繁忙的情況下,客戶應用程序可以把它們的請求放到隊列中,當服務器負載比較輕的時候再處理這些請求;
  又如COM+提供了負載平衡服務,它可以實現(xiàn)動態(tài)負載平衡,而且COM+應用程序的負載平衡特性并不需要編寫代碼來支持,客戶程序和組件程序都可以按通常 的方式實現(xiàn)。獲得負載平衡特性并不是用程序設計的方式來實現(xiàn)的,而是通過配置實現(xiàn)分布式應用程序的負載平衡,如上所講的隊列服務,其實也反映了一種負載平 衡。
     (1) 真正的異步通訊。COM+底層提供了隊列組件服務,這使客戶和組件有可能在不同的時間點上協(xié)同工作,COM+應用無須增加代碼就可以獲得這樣的特性。
     (2) 事件服務。新的事件機制使事件源和事件接收方實現(xiàn)事件功能更加靈活,利用系統(tǒng)服務簡化了事件模型,避免了COM可連接對象機制的瑣碎細節(jié)。

(3) 可伸縮性。COM+的可伸縮性來源于多個方面,動態(tài)負載平衡以及內存數(shù)據(jù)庫、對象池等系統(tǒng)服務都為COM+的可伸縮性提供了技術基礎,COM+的可伸縮性原理上與多層結構的可伸縮特性一致。
     (4) 可管理和可配置性。管理和配置是應用系統(tǒng)開發(fā)完成后的行為,在軟件維護成本不斷增加的今天,COM+應用將有助于軟件廠商和用戶減少這方面的投入。
     (5) 易于開發(fā)。COM+應用開發(fā)的復雜性和難易程度將決定COM+的成功與否,雖然COM+開發(fā)模型比以前的COM組件開發(fā)更為簡化,但真正提高開發(fā)效率仍需要借助于一些優(yōu)秀的開發(fā)工具。
      COM+ 標志著Microsoft的組件技術達到了一個新的高度,它不再局限于一臺機器上的桌面系統(tǒng),它把目標指向了更為廣闊的企業(yè)內部網,甚至 Internet國際互連網絡。COM+與多層結構模型以及Windows操作系統(tǒng)為企業(yè)應用或Web應用提供了一套完整的解決方案。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網頁標題:.NET組件和COM組件之間的相互操作方法-創(chuàng)新互聯(lián)
本文地址:http://muchs.cn/article16/dhcodg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、手機網站建設搜索引擎優(yōu)化、標簽優(yōu)化、App設計、全網營銷推廣

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網站網頁設計