首页 > 编程知识 正文

tooltips,user interface是啥

时间:2023-05-06 05:49:17 阅读:62486 作者:1063

1///08win32console-atl.CPP:控制台定义APP应用程序的入口点。

2//345 # include ' STD afx.h '6# includeobjbase.H7 # include iostream8using STD :3360 cout; 10 using std:endl; 1112//{ 4fd 945 C1-9258-40d6- 8370-738 ef 039 c 73 d } 13 staticconstiidiid _ IX=14 {0x4fd 945 C1,0x 9258,0x40d 6, {0x4} 516//{ 5765 b41e-c0e5- 47 a2-81af-ed8e 5981327 e } 17 staticconstiiidiiid _ iy=18 {0x 5765 b41e,0xc0e 5,0x47a 2 920//{ 81e 64914-44cf-43e3- 9660-e5a b7c 64 b 045 } 21 staticconstiidiid _聪明的老鼠=22 {0x81e 64914,0x 44 cf,0x43e3,{ } 2627接口IX : I unknown { 28 virtual void _ _ stdcall FX (=0; 29 }; 0331接口iy : I unknown { 32 virtual void _ _ stdcall fy ()=0; 33 }; 34 35接口聪明的老鼠3360 I unknown { 36 virtual void _ _ stdcall FZ ()=0; 37 }; 38 39 class CA : public IX,public iy 40 { 41 virtual hresult _ _ stdcallqueryinterface (constiiidiid,void ** ppv ); 42 virtual ulong _ _ stdcall addref ({ return 0; } 43 virtual ulong _ _ stdcall release () {return 0; } 4445 virtual void _ stdcall FX ({ cout ' ca :3360 FX ' endl; } 46 virtual void __stdcall Fy () {cout 'CA:Fy' endl; (47 ); 849 hresult _ stdcall ca :3360 query interface (constiidiid,void ** ppv ) 50 ) 51if ) iid==iid_Iunknown ) 52是54 * 55 ) 56elseif(iid==iid_IX ) 57 ) 58 trace (' query interface : returnpointertoix ' ); 59*PPV=static_castix*(this; 60 ) 61elseif(iid==iid_iy ) 62 ) 63t race (' query interface : retrunpointertoiy ' ); 64 *ppv=static_castIY *(this ); 65 } 66 else 67 { 68跟踪} (查询接口:接口连接支持); 69 * PPV=空; 70 return e _ no接口; 71 ) 72 reinterpret _ casti unknown * (PPV )-AddRef ); 73 74 return S_OK; 75 ) 7677 I unknown *创建实例(78 ) 79 I unknown * pi=static _ castix * (newca ); 80 pI-AddRef (; 81返回pi; 82 ) 8384intmain(85 ) 86HresultHR; 87跟踪(' client : getaniunknownpointer.'; 88 I unknown * puinknown=create instance (; 890跟踪(' client : getinterfaceix.'; 91 IX * pIX=NULL; 92hr=puinknown-query接口(iid _ IX,) void * * (pix ); 93if (安全(HR ) ) 94 { 95跟踪)客户端: succeededgettingix ); 96 pIX-Fx (; 97 ) 9899跟踪(' client : getinterfaceiy.'; 100 IY * pIY=NULL; 101 HR=puinknown-query接口(iid _ iy,) void ** ) pIY ); 102 if (安全(HR ) ) 103 ) 104跟踪)客户端:安全(succeededgettingiy ); 105 pIY-Fy (; 106 ) 107108 trace (客户端: get接口聪明的老鼠); 109聪明的老鼠* p聪明的老鼠=空; 10hr=puinknown-query接口(iid _聪明的老鼠,(void ** ) p聪明的老鼠); 11if (故障(HR ) ) 113跟踪(客户端: cannotgetinterface聪明的老鼠); 114 ) 115116跟踪(' client : getinterfaceiyfrominterfaceix.'; 117 IY * pIYfromIX=NULL; 18hr=pix-query接口(iid _ iy,) void * * (piyfromix ); 19if (安全(HR ) ) 121跟踪(客户端:安全); 122 pIYfromIX-Fy (; 123 ) 124125跟踪(客户端: getinterfaceiunknownfromiy ); 126 I unknown * piunknownfromiy=null; 127 HR=piy-query interface (iid _ I unknown,(void ** ) pIUnknownfromIY ); 128 if (安全(HR ) ) 130跟踪) aretheIunknownpointersequal ); 131 if (piunknownfromiy==puinknown ) 132跟踪('是); 133 else 134跟踪('否); 135 ) 136137deletepuinknown; 138千兆以太网(; 139返回0; 140 }

从其他任何接口都可以通过查询接口实现CA实现的任何接口

因为组件的实例只有一个IUnknown接口,所以要知道两个接口是否指向同一组件,只需在两个接口上查询IUnknown接口并比较返回值即可

c相当于面试,基本情况在简历上一目了然

COM是社交型的,只能通过咨询来理解

客户无法了解COM的详细信息,也无法了解COM的身份特征,从而将组件更改的影响降至最低。

组件通过AddRef和Release管理自己的生命周期(引用计数)

复制接口指针后,必须增加引用数

转载于:https://www.cn blogs.com/aoun/p/3755015.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。