精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

.NET 4.0的ICustomQueryInterface新特性

開發(fā) 后端
本文介紹了.NET 4.0的命名空間中的ICustomQueryInterface新特性。顧名思義,這個Interface的功能就是使得用戶可以自己控制QueryInterface這個COM最常用的函數(shù)的行為。

在.NET Framework v4.0發(fā)布的新功能中,在名字空間System.Runtime.InteropServices新增加了一個叫做ICustomQueryInterface的Interface, 顧名思義,這個Interface的功能就是使得用戶可以自己控制QueryInterface這個COM最常用的函數(shù)的行為。在v4.0以前,所有作用于托管組件上的QI行為,都是由CLR內(nèi)部的IUnkown:QueryInterface控制的,比如,如果你QI著名的IDispatch接口時,你得到的永遠(yuǎn)都是CLR提供的那個IDispatch,諸如此類的還有IMarshal/IProvideClassInfo等一些常用的Interface。如果你非常希望用自己的IDispatch實(shí)現(xiàn)來替換clr提供的實(shí)現(xiàn),那么恭喜你,ICustomQueryInterface就是為你而生的!當(dāng)然,ICustomQueryInterface所帶來的,不僅僅是簡單的Interface替換,它甚至可以使得Aggregate托管組件也成為現(xiàn)實(shí),wow,如果你了解Aggregation的話,一定會因此而雀躍不已的。我會在另一篇文章中通過例程給大家做一個詳細(xì)的介紹。

讓我們來看看這個ICustomQueryInterface的定義吧:

  1: public interface ICustomQueryInterface
  2: {
  3:     CustomQueryInterfaceResult GetInterface([In]ref Guid iid, out IntPtr ppv);
  4: }
  5: 

是的,就是這么簡單,就一個GetInterface方法,再仔細(xì)看看它的方法參數(shù),是不是和c++里面的QueryInterface有點(diǎn)神似啊。哈哈,其實(shí)你可以把它理解成QueryInterface的托管實(shí)現(xiàn)也無妨啊!不過它還有個小小的功能,就是如果自己不想處理這個QI,就返回NotHandled, clr看到這個返回值,就會調(diào)用自己的QI實(shí)現(xiàn)來幫你處理這個請求,爽吧。

讓我們來看看有了這個Interface之后clr內(nèi)部關(guān)于QI的處理流程圖吧:

關(guān)于QI的處理流程圖
.NET 4.0新特性:ICustomQueryInterface

從這個圖上我們可以看到,除了不能處理對IUnknown的QI請求(要求別太高嘛),其他統(tǒng)統(tǒng)OK!

理論一大堆了,來實(shí)戰(zhàn)一下。

看看我們的托管組件的實(shí)現(xiàn)

  1: using System;
  2: using System.Runtime.InteropServices;
  3:
  4: namespace States
  5: {   
  6:     [Guid("00020400-0000-0000-C000-000000001147")]
  7:     [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
  8:     public interface ICQ
  9:     {
 10:         int func();
 11:         void slot2();
 12:         void slot3();
 13:         void slot4();
 14:     }
 15:
 16:     [Guid("11120400-0000-0000-C000-000000001148")]
 17:     [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 18:     public interface IA
 19:     {
 20:         int FuncA();
 21:     }
 22:
 23:     [Guid("22220400-0000-0000-C000-000000001149")]
 24:     [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 25:     public interface IB
 26:     {
 27:         int FuncB();
 28:     }
 29:
 30:
 31:
 32:     [Guid("00020400-0000-0000-C000-000000001150")]
 33:     [ClassInterface(ClassInterfaceType.None)]
 34:     public class StatesComServer : ICustomQueryInterface, ICQ, IA, IB
 35:     {
 36:           public readonly Guid IID_IA = new Guid("11120400-0000-0000-C000-000000001148");
 37:        
 38:           public CustomQueryInterfaceResult GetInterface([In]ref Guid iid, out IntPtr intf)
 39:           {
 40:                 if (iid == WellKnownGuids.IID_IDispatch)
 41:                 {
 42:                     intf = Marshal.GetComInterfaceForObject(this, typeof(ICQ), CustomQueryInterfaceMode.Ignore);
 43:                     return CustomQueryInterfaceResult.Handled;
 44:                 }
 45:
 46:                 if (iid == IID_IA)
 47:                 {
 48:                     intf = IntPtr.Zero;
 49:                     return CustomQueryInterfaceResult.Failed;
 50:                 }
 51:
 52:                 intf = IntPtr.Zero;
 53:                 return CustomQueryInterfaceResult.NotHandled;
 54:           }
 55:
 56:           public int func()
 57:           {
 58:               Console.WriteLine("This is Interface ICQ, not the IDispatch!!!");
 59:                return 2008;
 60:           }
 61:
 62:           public int FuncA()
 63:           {
 64:               Console.WriteLine("This is Interface IA!!!");
 65:               return 3008;
 66:           }
 67:
 68:           public int FuncB()
 69:           {
 70:               Console.WriteLine("This is Interface IB!!!");
 71:               return 4008;
 72:           }
 73:
 74:
 75:         #region Empty Functions
 76:           public void slot2() { }
 77:           public void slot3() { }
 78:           public void slot4() { }
 79:         #endregion
 80:     }
 81:
 82: }
 83:

這里稍微做個解釋,GetInterface的返回值如果是CustomQueryInterfaceResult.Failed,意思是QI失敗。CustomQueryInterfaceResult.NotHandled意思是讓clr去處理這個請求,CustomQueryInterfaceResult.Handled是告訴clr,已經(jīng)處理好了,指針值保存在intf里面,直接返回給用戶就可以了。

再來看看我們的客戶端

  1. IDispatch * pDisp = NULL;  
  2. printf("Scenario 1: QI IDispatch interface, Expected the Custom IDispatch interface\n");  
  3. hresult = pUnknown->QueryInterface(IID_IDispatch, (void**)&pDisp);  
  4.  
  5. UINT count  = 0;  
  6. hresult = pDisp->GetTypeInfoCount(&count);  
  7. printf("Return value of GetTypeInfoCount is %d\n", count);    
  8.  
  9. IA * pA = NULL;  
  10. printf("Scenario 2: QI IA interface, Expected failed\n");  
  11. hresult = pUnknown->QueryInterface(IID_IA, (void**)&hresult);  
  12. if (FAILED(hresult))  
  13. {  
  14.   printf("Failed to QI IA with error code %x\n", count);    
  15. }  
  16. IB * pB = NULL;  
  17. printf("Scenario 3: QI IB interface interface, Expected the IB interface\n");  
  18. hresult = pUnknown->QueryInterface(IID_IB, (void**)&pB);  
  19. long i  = 0;  
  20. hresult = pB->FuncB(&i);  
  21.    

再來看看我們的輸出結(jié)果。

  1. Scenario 1: QI IDispatch interface, Expected the Custom IDispatch interface 
  2. This is Interface ICQ, not the IDispatch!!!  
  3. Return value of GetTypeInfoCount is 2008  
  4. Scenario 2: QI iA interface, Expected failed  
  5. Failed to QI IA with error code 7d8  
  6. Scenario 3: QI IB interface interface, Expected the IB interface 
  7. This is Interface IB!!!  
  8.  

以上就介紹了.NET 4.0的命名空間中的ICustomQueryInterface新特性。

【編輯推薦】

  1. C#數(shù)據(jù)庫查詢和操作大全
  2. 簡單介紹C#預(yù)處理
  3. 學(xué)習(xí)C#無詞尾符號經(jīng)驗談
  4. C#調(diào)用QuickTest自動化
  5. 詳解C#正規(guī)表達(dá)式
責(zé)任編輯:yangsai 來源: CSDN博客
相關(guān)推薦

2009-09-04 16:28:05

ASP.NET 4.0

2009-12-30 10:21:36

.NET 4.0

2010-01-05 09:26:13

.NET 4.0

2010-02-24 14:24:35

.NET 4.0

2009-08-18 09:37:42

ASP.NET 4.0

2009-07-06 11:00:56

.NET 4.0新特性.NET

2018-11-15 14:05:24

MongoDB數(shù)據(jù)庫事務(wù)

2009-08-19 16:51:14

C# 4.0 dyna

2009-05-26 09:28:22

C# 4.0dynamic動態(tài)類型

2009-07-30 13:17:44

STM.NET.NET 4 Beta

2012-01-09 16:00:56

2009-05-26 11:15:31

C# 4.0dynamicVisual Stud

2009-07-30 14:55:43

ASP.NET 2.0

2010-08-17 09:57:39

C#

2009-03-12 11:26:35

Data ServicADO.NET.NET

2009-11-04 14:17:34

ADO.NET 2.0

2009-11-03 09:37:33

VB.NET重載

2009-11-04 15:44:39

ADO.NET Sql

2011-01-14 10:27:18

C#.netasp.net

2019-08-26 18:45:59

RedisRedis4.0數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

欧美黄色录像片| 粉嫩一区二区三区| 97精品国产露脸对白| 热99精品里视频精品| 纪美影视在线观看电视版使用方法| 国产美女明星三级做爰| 亚洲先锋影音| 日韩精品福利网站| 激情黄色小视频| 99在线视频影院| 久久久久九九视频| 51精品国产人成在线观看| 午夜毛片在线观看| 色琪琪久久se色| 亚洲风情亚aⅴ在线发布| 亚洲一区二区蜜桃| 超免费在线视频| 国产精品色一区二区三区| 国产另类自拍| 国产精品久久久久久久久毛片| 亚洲老女人视频免费| 欧美丰满嫩嫩电影| 欧美一级中文字幕| 大地资源中文在线观看免费版| 99re国产精品| 久久成人精品视频| 免费看黄色的视频| 国产精品视频3p| 欧美一区二区三区系列电影| 又粗又黑又大的吊av| 91大学生片黄在线观看| 高清av免费看| 欧美激情网站| 亚洲综合男人的天堂| 性欧美大战久久久久久久免费观看| av黄色在线看| 韩日欧美一区| 久久久成人精品| 精品国产aaa| 伊人久久大香线蕉| 日韩av网站导航| 国产女主播在线播放| 欧美午夜三级| 欧美日韩一区二区三区四区五区 | 亚洲天堂中文网| 性欧美videos另类喷潮| 欧美裸身视频免费观看| 国产精品夜夜夜爽阿娇| 日韩欧美大片| 色老头一区二区三区| 久久成人激情视频| 精品久久成人| 国产一区二区三区精品久久久| 一二三级黄色片| 欧美高清你懂的| 欧美欧美欧美欧美| 亚洲第一天堂久久| 日韩成人精品一区二区三区| 欧美日韩激情一区二区| 成人午夜激情av| 亚洲不卡系列| 欧美日韩精品欧美日韩精品一综合| 国产aaa免费视频| 最新国产露脸在线观看| 亚洲免费视频中文字幕| 成人av在线播放观看| 午夜激情在线| 亚洲国产精品久久久男人的天堂| 天天人人精品| 永久免费av片在线观看全网站| 国产成人在线视频网站| 亚洲综合最新在线| 亚洲精品久久久狠狠狠爱| 成人在线综合网| 久久偷窥视频| 成人午夜影视| 亚洲免费观看视频| 国产夫妻自拍一区| 男人皇宫亚洲男人2020| 欧美性猛交xxxx乱大交退制版 | 秋霞电影一区二区| 国产精品免费视频xxxx| 一级二级三级视频| 国产精品99久久久| 鲁丝一区鲁丝二区鲁丝三区| 国产精品毛片一区二区三区四区| 成人av午夜影院| 欧美性天天影院| 国产精品实拍| 欧美日韩精品中文字幕| 亚洲国产精品毛片av不卡在线| 天天干在线视频论坛| 天天综合网天天综合色| 中文字幕永久视频| 99re8这里有精品热视频8在线| 欧美视频自拍偷拍| 日本人妻一区二区三区| 麻豆一区一区三区四区| 最近2019中文免费高清视频观看www99 | 五月天国产在线| 欧美日韩国产免费| 老司机午夜免费福利| 欧美一级精品片在线看| 欧美极品少妇xxxxx| 伊人中文字幕在线观看| 国产精品自拍三区| 欧美一区二区三区在线播放| jizz性欧美10| 欧美午夜精品理论片a级按摩| 日韩欧美xxxx| 国产精品777777在线播放| 日韩精品免费观看| 天天看片中文字幕| 日本亚洲免费观看| 久久国产精品免费一区| 在线heyzo| 欧美日韩国产a| 国产男女猛烈无遮挡a片漫画| 丝袜久久网站| 久久激情五月丁香伊人| 神马久久久久久久| www.99精品| 91网站在线观看免费| 日韩av一级| 亚洲精品永久免费| 精品无码久久久久久久| 国产又粗又猛又爽又黄91精品| 成人网中文字幕| 国内精品在线视频| 天天亚洲美女在线视频| 日韩成人av影院| 亚洲精品久久| 成人国产在线激情| 自拍视频在线| 欧美三级中文字幕| avhd101老司机| 久久九九电影| 欧美日韩在线播放一区二区| 国模私拍一区二区国模曼安| 欧美一级久久久| 人成免费在线视频| 免费在线视频一区| 亚洲v国产v| 国产福利一区二区三区在线播放| 欧美日韩一区高清| 国产精欧美一区二区三区白种人| 一区中文字幕电影| 欧美肥婆姓交大片| 午夜精品久久久久久久91蜜桃| 99riav一区二区三区| 国产精品自拍合集| 北条麻妃一区二区三区在线观看| 日韩精品有码在线观看| 日韩在线视频免费播放| 久久久噜噜噜久久中文字幕色伊伊 | 国产日产亚洲系列最新| 综合av第一页| 一级黄色片在线免费观看| 国产精品毛片一区二区在线看| 91超碰caoporn97人人| 天天操天天操天天操| 亚洲一区二区欧美日韩| 日本一区二区免费视频| 99热这里只有成人精品国产| 欧美极品一区二区| 影音成人av| 欧美wwwxxxx| 亚洲伦理在线观看| 天天综合网 天天综合色| 亚洲综合网在线观看| 青娱乐精品视频| 自拍偷拍99| 91在线一区| 欧美在线视频一区二区| 第九色区av在线| 91精品国产色综合久久久蜜香臀| av网在线播放| 久久99九九99精品| 黄色一级片黄色| 日韩电影不卡一区| 成人黄色av网站| 亚洲第一图区| 亚洲欧美成人网| 亚洲一区二区视频在线播放| 亚洲综合自拍偷拍| www.99热| 国产成人啪午夜精品网站男同| 亚洲一区精彩视频| 91成人在线精品视频| 青青草国产精品一区二区| 色三级在线观看| 亚洲国内高清视频| 一本大道伊人av久久综合| 午夜精品福利视频网站| 亚洲图片第一页| 不卡视频免费播放| 亚洲天堂av线| 99riav国产精品| 一区二区三区日韩视频| 日韩精品亚洲aⅴ在线影院| 国产欧美一区二区| 在线免费看h| 美日韩精品免费观看视频| 精品视频二区| 欧美va天堂va视频va在线| 懂色av中文字幕| 亚洲成人av在线电影| 一本一本久久a久久| 91网站在线观看视频| 亚洲一二区在线观看| 麻豆精品网站| 欧洲精品一区二区三区久久| 久久福利影院| 日韩精品资源| 精品久久ai| 96pao国产成视频永久免费| 亚洲人免费短视频| 97av在线视频| av影片在线| 欧美成人午夜激情| 免费在线看a| 亚洲精品久久久久中文字幕二区| 日本高清不卡码| 亚洲午夜久久久久久久久电影网| 又黄又爽的网站| 国产一区二区在线电影| 五月婷婷激情久久| 模特精品在线| www.中文字幕在线| 99国产精品久久久久久久成人热| 开心色怡人综合网站| 91精品久久久久久综合五月天| 国语自产精品视频在线看抢先版图片 | 级毛片内射视频| 2欧美一区二区三区在线观看视频| 男女av免费观看| 日韩视频一区| 日韩av一二三四区| 亚洲女同同性videoxma| 久久视频这里有精品| 欧美日本免费| 国产在线视频综合| 欧美精品自拍| 国产人妻人伦精品| 欧美日韩国产综合网| 亚洲黄色网址在线观看| 中文字幕免费精品| 69精品丰满人妻无码视频a片| 一本久久青青| 欧美下载看逼逼| 欧美日韩国产在线观看网站| 日韩久久不卡| 日本一区二区三区视频| 亚洲欧洲精品在线| 91精品国产自产在线观看永久∴| 精品视频一区在线| 卡通动漫精品一区二区三区| 精品一卡二卡三卡四卡日本乱码 | 欧美另类tv| 欧美极品少妇xxxxx| 激情影院在线| 91产国在线观看动作片喷水| 欧美一级大黄| 国产视频观看一区| 日韩在线亚洲| 精品欧美一区二区久久久伦| 国产免费播放一区二区| 婷婷久久五月天| 99久久影视| 国产精品入口芒果| 久久久久91| 一区二区三区四区毛片| 国产成人精品免费看| 亚洲久久久久久| 中文字幕乱码一区二区免费| 免费在线观看黄色小视频| 亚洲永久精品国产| 国产成人精品777777| 在线成人小视频| 天天操天天干天天| 社区色欧美激情 | 牛牛在线精品视频| 国产成人福利网站| 欧州一区二区三区| 麻豆传媒一区二区| 99久精品视频在线观看视频| 日韩黄色短视频| 免费xxxx性欧美18vr| 在线观看免费视频黄| 国产欧美日韩麻豆91| 久久久久黄色片| 在线精品视频小说1| 午夜免费福利视频| 国产一区二区三区18| 丁香花视频在线观看| 国产精品色婷婷视频| 成人在线超碰| 亚洲欧美久久久久一区二区三区| 国产欧美一区二区三区精品观看 | 香港三日本三级少妇66| 中文字幕在线观看日韩| 538视频在线| 成人国产精品久久久| 国产91久久精品一区二区| 国产精品三级一区二区| 久久一二三四| 亚洲精品乱码久久久久久9色| 国产一区二区在线免费观看| 醉酒壮男gay强迫野外xx| 亚洲人亚洲人成电影网站色| 天天干,天天干| 精品国产伦一区二区三区观看体验 | 一级黄色性视频| 亚洲在线视频免费观看| 在线观看亚洲一区二区| 日韩www在线| 七七久久电影网| 成人免费激情视频| 日本欧美视频| 日韩中文字幕免费在线| 99久久99久久精品免费看蜜桃| 日韩一级视频在线观看| 亚洲图片欧美综合| 亚洲AV无码一区二区三区少妇 | 成年人在线观看| 97视频在线观看免费高清完整版在线观看| 2019中文字幕在线电影免费| 国产日韩亚洲欧美| 狠狠做六月爱婷婷综合aⅴ| 黄色av网址在线播放| 粉嫩av一区二区三区| 国产成人无码aa精品一区| 在线不卡中文字幕| 青青青青在线| 成人美女av在线直播| 日韩一区亚洲二区| 久久99爱视频| 中文字幕不卡的av| 波多野结衣一区二区三区在线| 欧美精品视频www在线观看 | 五月天激情国产综合婷婷婷| 亚洲成人精品久久| 黑人玩欧美人三根一起进| 成人一区二区在线| 红桃视频国产一区| 中国特级黄色片| 婷婷久久综合九色国产成人 | 日韩在线电影一区| 性色一区二区三区| 右手影院亚洲欧美| 色婷婷综合久久久久中文一区二区| 国产乱淫片视频| 欧美成人精品一区二区| 日韩免费一级| 亚洲熟妇无码一区二区三区| 成人免费高清在线观看| 在线观看国产亚洲| 亚洲欧美精品中文字幕在线| 向日葵视频成人app网址| 亚洲人成77777| 国产综合色在线视频区| 国产va在线播放| 日韩av在线资源| 一二区成人影院电影网| 一区二区三区偷拍| 国产精品亚洲视频| 国产精品500部| 中文字幕久精品免费视频| 99国内精品久久久久| 屁屁影院ccyy国产第一页| 99热精品国产| 波多野结衣一二区| 欧美久久精品午夜青青大伊人| 欧美大胆成人| 韩国成人一区| 青青国产91久久久久久| 99久久精品久久亚洲精品| 日韩免费成人网| 成人免费无遮挡| 中文字幕免费在线不卡| 国产91露脸合集magnet| 特级毛片www| 久久久97精品| 亚洲深夜福利在线观看| 欧美精品 - 色网| 精品久久久国产精品999| 高清美女视频一区| 高清视频一区| 老妇喷水一区二区三区| 国产精品三区在线观看| 日韩电影免费观看中文字幕| 国产成人免费| 免费一级特黄特色毛片久久看| 成人午夜电影小说| 中文字幕免费观看| 久久av在线播放| 精品国产中文字幕第一页| 亚洲少妇中文字幕| 欧美日韩一区中文字幕| 精品极品在线|