国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:59:11
字體:
來源:轉載
供稿:網友
.net組件和com組件之間的相互操作
.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平臺技術吧。

商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 班玛县| 石阡县| 城口县| 乌海市| 成安县| 建瓯市| 磴口县| 新平| 滨州市| 桂东县| 海丰县| 安远县| 北票市| 吴桥县| 桂平市| 黄冈市| 邵东县| 兴宁市| 中阳县| 健康| 克什克腾旗| 东乡| 周口市| 枞阳县| 化德县| 新兴县| 大荔县| 塔城市| 满洲里市| 乡城县| 望都县| 紫金县| 晋江市| 大竹县| 五莲县| 华亭县| 九龙城区| 江油市| 公主岭市| 措勤县| 琼结县|