91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.NET組件和COM組件之間的相互操作方法

發布時間:2020-07-17 01:34:11 來源:網絡 閱讀:1277 作者:OH51888 欄目:編程語言

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

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的集成環境中使用菜單中的“引用”選項,選擇我們剛才產生的類型庫文件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在設計之初就考慮到了如何方便的利用現有的各種技術資源,這也是微軟的一貫作風,.NET的強 大之處也可見一斑。.NET提供了大量的類庫來方便的實現同COM的相互操作,其中很重要的一個名稱空間就是: System.Runtime.InteropServices。通過這個名稱空間的名字我們也可以從字面上看出,“互操作服務”。 System.Runtime.InteropServices這個名稱空間提供了一系列的類來對COM對象進行操作。
下面的例子中,我們來調用一下系統自帶的Win32函數MessageBoxA,這個函數位于系統的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組件是非常的方便的吧。上面是我們調用的系統本身自帶的DLL組件,同樣的,也可以使用這種方法來調用我們自己使用VB/VC編寫的COM組件。

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹寨县| 南溪县| 建德市| 元朗区| 吉木乃县| 红桥区| 灵台县| 黄平县| 龙海市| 怀柔区| 遂宁市| 彭阳县| 闻喜县| 炎陵县| 积石山| 武清区| 齐齐哈尔市| 山阴县| 山东| 台南市| 连城县| 博爱县| 珲春市| 康乐县| 万盛区| 呈贡县| 邛崃市| 万山特区| 宝丰县| 原平市| 时尚| 达州市| 达日县| 望奎县| 门头沟区| 泸溪县| 花莲县| 光泽县| 高州市| 安康市| 出国|