日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C#組件開發(fā):COM和.NET對(duì)象之間的互操作

C#組件發(fā)展歷史

扎賚特網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,扎賚特網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為扎賚特上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的扎賚特做網(wǎng)站的公司定做!

在面向?qū)ο蠹夹g(shù)發(fā)展的初期開始暴露出來了很多的問題,其中一個(gè)就是隨著系統(tǒng)的復(fù)雜度不斷上升,系統(tǒng)的類開始出現(xiàn)爆炸,而且對(duì)象之間的調(diào)用依賴無法在一個(gè)更高的抽象層次上彼此之間的松散耦合,這也因此導(dǎo)致了這種基于源代碼的復(fù)用方式變得非常脆弱?;诮M件的開發(fā)技術(shù)很好地解決了上面的問題,它在組件(某個(gè)功能的聚合,是一個(gè)類的集合)這個(gè)層次上實(shí)現(xiàn)了抽象和復(fù)用。在這個(gè)時(shí)期,COM(Component Object Model)技術(shù)作為這么一種方法論的實(shí)現(xiàn)方式開始展現(xiàn)它獨(dú)特的魅力,而Microsoft則帶領(lǐng)著IT界把這一技術(shù)推向了穩(wěn)定、成熟。

而到了20世紀(jì)90年代末期,隨著商業(yè)邏輯處理的復(fù)雜化以及很多個(gè)性化的需求的出現(xiàn),軟件復(fù)雜度也開始提高,COM技術(shù)在應(yīng)用技術(shù)領(lǐng)域也開始顯得力不從心了。在這個(gè)時(shí)候就需要一種更靈活的、基于標(biāo)準(zhǔn)的技術(shù)來支撐應(yīng)用軟件的開發(fā),.NET作為一個(gè)具有跨時(shí)代意義的應(yīng)用軟件的開發(fā)平臺(tái)悄然而至。.NET以一種基于平臺(tái)方式(應(yīng)用軟件依賴于某個(gè)平臺(tái),可移植性依賴于平臺(tái)),又在一個(gè)更高的層次上實(shí)現(xiàn)了軟件的復(fù)用。

問題描述

為了保持.NET和COM技術(shù)的可互操作性,Microsoft提供一個(gè)專門的組件來解決這個(gè)問題,可以參考命名空間System.Runtime.InteropService。它不為.NET對(duì)原有的COM組件的調(diào)用提供了一種有效的方式,同時(shí)也為用.NET編寫COM組件提供一種便利。

C#組件開發(fā)步驟

Step 1構(gòu)建.NET組件

新建一個(gè).NET組件

設(shè)置這個(gè).NET組件的COM可見性

設(shè)置工程屬性:“生成”-> “為COM Interop注冊(cè)”。

當(dāng)然也可以為每個(gè)接口設(shè)置COM可見性,ComVisibleAttribute類提供了這樣的控制。

Step 2定義組件接口

每個(gè)COM組件接口都有一個(gè)***的GUID,在.NET接口的定義中由Guid屬性來指定

在這個(gè)例子中我定義了如下的接口:

 
 
 
  1. [TypeLibType(4160)]
  2. [Guid("F0485D81-59C1-44b1-9316-D474E26C026E")] 
  3. public interface IXMPReader
  4. {
  5.     [DispId(0)]
  6.     string Metadata { get;set;}
  7.     [DispId(1)]
  8.     IXMPTemplate ReadTemplate(string xPath);
  9. }

Step 3實(shí)現(xiàn)組件接口

每個(gè)COM組件接口的實(shí)現(xiàn)類也都有一個(gè)***的GUID,由Guid屬性來定定義,

在IDL中對(duì)組件類的定義需要有一個(gè)Default(默認(rèn)實(shí)現(xiàn)的接口聲明), 在.NET組件中由ComDefaultInterface屬性來定義。

在這個(gè)例子中我是這樣實(shí)現(xiàn)了這個(gè)接口的,如下:

 
 
 
  1. namespace XMPTemplate
  2. {
  3.     [TypeLibType(4160)]
  4.     [Guid("AD665240-9E4D-4c30-9475-023EA44E41BD")]
  5.     [ComDefaultInterface(typeof(IXMPReader))]
  6.     [ComSourceInterfaces(typeof(IXMPReader))]
  7.     public class XMPReader : IXMPReader
  8.     {
  9.         private string _metadata="";
  10.         public string Metadata
  11.         {
  12.             get { return _metadata; }
  13.             set { _metadata = value; ; }
  14.         }
  15.         public IXMPTemplate ReadTemplate(string xPath)
  16.         {
  17.                 XmlDocument document = new XmlDocument();
  18.                 document.LoadXml(Metadata);
  19.                 XmlNode node = document.SelectSingleNode(xPath);
  20.                 XMPTemplate template = new XMPTemplate();
  21.                 template.LoadXml(node.InnerXml);
  22.                 return template;
  23. }
  24.     }

Step 4部署

假設(shè)我們生成的.NET組件的名稱是XMPTemplate.dll,訪問路徑為C:\ XMPTemplate.dll

利用Regasm工具來注冊(cè).NET組件

regasm C:\ XMPTemplate.dll

將這個(gè).NET組件加入到全局程序集緩存中

Gacutil /I C:\ XMPTemplate.dll

開發(fā)C#組件而實(shí)現(xiàn)COM和.NET對(duì)象之間的互操作就介紹到這里。


網(wǎng)站題目:C#組件開發(fā):COM和.NET對(duì)象之間的互操作
標(biāo)題URL:http://www.dlmjj.cn/article/dpphegi.html