精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国产精品羞羞答答| 亚洲电影第1页| 成年人三级视频| 亚洲国产精品视频在线| 国产欧美日本| 中文字幕亚洲欧美一区二区三区| 黄色片免费网址| 日韩伦理在线| 中文字幕亚洲区| 国产精品一区二区三区精品| 人人草在线观看| 一区二区三区四区日韩| 精品一区二区三区电影| 亚洲18在线看污www麻豆| 高清毛片在线观看| 国产精品视频第一区| 国产99午夜精品一区二区三区 | 夜夜爽夜夜爽精品视频| 韩国成人一区| 国产黄色一区二区| 免费在线观看不卡| 欧美激情一级二级| 性生交大片免费全黄| 色天下一区二区三区| 91精品国产色综合久久不卡蜜臀| 国产二区视频在线播放| 中文在线免费| 中文字幕一区二区三中文字幕| 久久riav| 免费国产羞羞网站视频| 国产一区二区三区在线观看免费 | 97精品视频在线观看自产线路二| 91精品久久久久| 成人黄色三级视频| 亚洲欧美日本国产专区一区| 欧美黄色片视频| 日韩视频中文字幕在线观看| 日韩欧美精品一区| 尤物yw午夜国产精品视频| 日韩av一二区| 丁香综合av| 日韩欧美国产一区在线观看| 亚洲图色中文字幕| 九七电影院97理论片久久tvb| 色综合中文字幕| 欧美啪啪免费视频| 久久香蕉av| 亚洲一区自拍偷拍| 成人毛片100部免费看| 国产精品扒开做爽爽爽的视频 | 亚洲精品理论电影| 国产在线视频三区| 看亚洲a级一级毛片| 欧美精品1区2区| 911福利视频| 四虎精品在线观看| 5858s免费视频成人| 久久精品国产露脸对白| 青青草国产一区二区三区| 欧美日韩中文另类| 亚洲免费黄色录像| 视频一区中文字幕精品| 日韩精品一区二区三区蜜臀| www.美色吧.com| 欧美jizz19性欧美| 亚洲美女动态图120秒| 精品少妇人妻一区二区黑料社区| 欧美欧美黄在线二区| 亚洲欧美一区二区三区四区 | 亚洲第一成年人网站| 丁香激情综合五月| 精品视频在线观看| 国产福利在线| 国产精品高潮呻吟久久| 超碰超碰超碰超碰超碰| 女人天堂av在线播放| 精品久久久久久国产91| 成人在线观看黄| 日韩大陆av| 欧美va亚洲va国产综合| 中文字字幕码一二三区| 国内精品久久久久久久影视简单| 日韩视频在线一区| 国产在线观看成人| 免费永久网站黄欧美| 国产精品伦子伦免费视频| 国产免费福利视频| 99久久久久免费精品国产| 日韩福利一区二区三区| 激情影院在线观看| 午夜激情久久久| 日韩一级片播放| 91成人福利社区| 亚洲黄页网在线观看| 国产无遮挡在线观看| 国内自拍一区| 国产精品久久久久久av| 亚洲av无码国产精品久久不卡 | 日本不卡一区| av片在线观看网站| 色综合婷婷久久| 国产不卡的av| 国产精品嫩模av在线| 色综合久久88色综合天天看泰| 国产精品第5页| 国产精品综合一区二区三区| 欧美日韩在线观看一区| 性欧美videos高清hd4k| 色94色欧美sute亚洲线路二| 师生出轨h灌满了1v1| 精品日产免费二区日产免费二区| 九九精品视频在线观看| 国产精品露脸视频| 99久久777色| 亚洲av综合色区| 91tv亚洲精品香蕉国产一区| 亚洲国产精品人人爽夜夜爽| 日韩精品123区| 肉丝袜脚交视频一区二区| 国产精品乱码| a视频在线播放| 欧洲一区二区三区免费视频| 亚洲国产果冻传媒av在线观看| 久久精品久久久| 国产精品久久久久久久久久尿| 免费观看成年人视频| 亚洲人成伊人成综合网小说| 午夜免费一区二区| 日韩欧美黄色| 久久人人爽人人| 亚洲va久久久噜噜噜无码久久| 亚洲国产高清在线| 99久久国产宗和精品1上映| 高潮久久久久久久久久久久久久 | av久久网站| 亚洲精选中文字幕| 久久久国产精品成人免费| 成人性生交大片免费看视频在线| 成年人三级视频| 成人51免费| 日韩视频一区在线| 亚洲天堂狠狠干| 中文字幕乱码日本亚洲一区二区| 免费在线观看日韩视频| 小说区图片区色综合区| 91精品国产精品| 婷婷在线观看视频| 亚洲成a人v欧美综合天堂下载| 99国产精品免费视频| 欧美在线免费| 91久久精品一区二区别| jizz性欧美10| 欧美大片在线观看一区二区| 青娱乐国产精品| 国产成人av福利| 97超碰在线人人| 日本久久成人网| 欧美亚洲日本黄色| 黄色大片在线免费观看| 在线观看亚洲精品| 香蕉久久久久久久| 国产在线麻豆精品观看| 青青草视频国产| 给我免费播放日韩视频| 97视频免费在线观看| 亚洲色图狠狠干| 91国产丝袜在线播放| 日韩av片在线免费观看| 国产一区二区三区四| japanese在线播放| 欧美亚洲国产日韩| 国产精品99免视看9| 91网在线播放| 日韩一区二区三区三四区视频在线观看 | 白嫩少妇丰满一区二区| 日韩片欧美片| 99精品欧美一区二区三区| av手机免费在线观看| 亚洲欧美日韩在线一区| 一区二区久久精品66国产精品 | 三级视频在线观看| 国产精品免费av| 色综合久久久无码中文字幕波多| 日韩图片一区| 午夜一区二区三区| 1313精品午夜理伦电影| 欧美在线亚洲一区| 黄在线免费看| 亚洲欧美在线免费观看| 一级黄色片视频| 亚洲成人在线观看视频| 日本综合在线观看| 成人在线视频一区二区| 国产精品无码一本二本三本色| 欧美在线播放| 日本亚洲导航| 2023国产精华国产精品| 国产成人久久精品| 高h视频在线播放| 在线视频欧美日韩精品| 粉嫩av一区二区夜夜嗨| 欧美日韩精品免费观看视频| 国产精品18p| 日韩一区中文字幕| av黄色免费网站| 国产99久久久国产精品潘金网站| 黑人粗进入欧美aaaaa| 9国产精品视频| 中文字幕日韩精品久久| 亚洲免费观看高清完整版在线观| 亚洲专区国产精品| 欧美影视资讯| 欧美一级片在线播放| 午夜羞羞小视频在线观看| 亚洲少妇激情视频| 欧美一区二区黄片| 欧美一区二区久久| 一道本无吗一区| 色偷偷久久一区二区三区| 免费麻豆国产一区二区三区四区| 国产欧美日韩在线观看| 香港三级日本三级| 国产精品小仙女| 国产九九在线观看| 日韩高清国产一区在线| 欧美 丝袜 自拍 制服 另类| 欧美1区2区3区| 中文字幕不卡每日更新1区2区| 少妇精品久久久一区二区| 国产三区精品| 日韩精品成人| 91欧美激情另类亚洲| 欧美国产日韩电影| 日韩av男人的天堂| 欧美freesex黑人又粗又大| 伦伦影院午夜日韩欧美限制| 老司机午夜在线| 中文欧美日本在线资源| www黄在线观看| 一区二区三区黄色| 成人在线免费视频| 亚洲性xxxx| 国产综合视频一区二区三区免费| 日韩精品视频在线观看网址| 欧洲成人一区二区三区| 精品电影一区二区| 免费观看国产精品| 亚洲黄色在线看| 色视频在线观看福利| 亚洲国产精久久久久久 | 2020日本不卡一区二区视频| 国产精品久久久久久亚洲色| 波多野结衣亚洲一区| 又黄又爽的网站| 2020国产精品| 色屁屁草草影院ccyy.com| 亚洲国产成人私人影院tom | 精品国产乱码久久久久久虫虫漫画| 日本熟妇毛耸耸xxxxxx| 精品久久久一区二区| 亚洲国产成人精品激情在线| 精品动漫一区二区三区| 日本熟女毛茸茸| 欧美日韩一区二区三区高清| 国产又爽又黄免费软件| 日韩网站在线看片你懂的| 国产综合在线播放| 亚洲国产精品专区久久| 免费在线观看污视频| 日韩中文字幕在线观看| 二区三区在线观看| 午夜精品一区二区三区在线视频 | 97碰碰视频| 国产调教精品| 91美女精品福利| 亚洲色图 在线视频| 国产在线播放一区| 日本一卡二卡在线| 国产精品三级视频| 免费在线观看日韩| 日本道在线观看一区二区| 亚洲一级在线播放| 亚洲成人免费在线视频| 搞黄视频在线观看| 欧美高清视频在线观看| 香蕉成人av| 91视频免费进入| 精品久久久久久久久久久下田| 老司机午夜网站| 免费亚洲视频| 中文字幕无人区二| 亚洲国产电影在线观看| 日本少妇裸体做爰| 欧美日本一区二区三区| 香蕉视频免费看| 久久久久999| 黑人精品一区| 亚洲最大的av网站| 精品黄色一级片| 日韩欧美国产综合在线| 久久国产视频网| 自拍偷拍中文字幕| 夜色激情一区二区| 奴色虐av一区二区三区| 亚洲精品一区二区三区香蕉| 在线a免费看| 青青精品视频播放| 成人资源在线播放| 国产福利片一区二区| 久久久精品日韩| 亚洲一区二区在线免费| 一区二区三区自拍| 一区二区三区亚洲视频| 亚洲日韩第一页| a级片在线免费观看| 亚洲sss综合天堂久久| 亚洲三级网址| 国产91av视频在线观看| 日产欧产美韩系列久久99| jlzzjizz在线播放观看| 亚洲精品国产无天堂网2021| 夜夜嗨av禁果av粉嫩avhd| 亚洲性猛交xxxxwww| 国模套图日韩精品一区二区| 极品尤物一区二区三区| 亚洲午夜在线| 熟妇无码乱子成人精品| ㊣最新国产の精品bt伙计久久| 中文字幕一区二区三区四区欧美| 日韩精品在线免费播放| 91在线三级| 国产精品成人观看视频免费| 欧美在线亚洲综合一区| 一级黄色大片儿| 亚洲国产免费看| 国产精品88a∨| 精品影片在线观看的网站| 国产午夜伦鲁鲁| 99久久精品一区| 91av在线免费视频| 精品一区二区亚洲| 亚洲美女炮图| 久久精品综合一区| 99日韩精品| 中文字字幕码一二三区| 日本二三区不卡| av片在线免费观看| 国产日韩中文字幕在线| 99精品网站| 一个人看的视频www| 亚洲一区在线看| 天堂在线中文字幕| 国产91色在线|| 日韩欧美视频在线播放| 中文字幕精品一区二区三区在线| 日韩理论片在线| 亚洲av无码专区在线| 91爱视频在线| av在线不卡免费观看| 青青草原国产在线视频| ...xxx性欧美| 欧美一级特黄aaaaaa大片在线观看| 97视频免费在线看| 禁断一区二区三区在线| av免费一区二区| 亚洲夂夂婷婷色拍ww47| 五月婷婷六月色| 国产精品日韩在线| 自拍日韩欧美| 欧洲一级黄色片| 欧美色爱综合网| 青青青草视频在线| 你懂的网址一区二区三区| 美国三级日本三级久久99| 欧美成人aaa片一区国产精品| 亚洲韩国日本中文字幕| 成人国产一区| 久久久久久av无码免费网站下载| 99国产精品国产精品久久| 99re热视频| 欧美福利在线观看| 韩日一区二区三区| 丰满饥渴老女人hd| 色哟哟一区二区在线观看| 秋霞午夜在线观看| 九九九九九精品| 精品一区二区三区在线观看国产 | 福利视频第一区| 欧美人xxx| 精品视频第一区| 国产一区二区三区香蕉 | 欧美一区二区视频在线观看2020 | 亚洲一区日韩| 国产真实乱在线更新| 精品无码久久久久久国产| 99综合久久| 男人舔女人下面高潮视频| 亚洲精品久久久蜜桃| 国产精品久久一区二区三区不卡 | 日日躁夜夜躁白天躁晚上躁91|