亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++事件處理中__event與__raise關鍵字的用法講解

2020-01-26 14:44:15
字體:
來源:轉載
供稿:網友

__event
聲明事件。
語法

   __event    method-declarator   ;__event __interface interface-specifier;__event member-declarator;

備注
關鍵字 __event 可應用于方法聲明、接口聲明或數據成員聲明。但是,不能使用 __event 關鍵字限定嵌套類的成員。
根據您的事件源和接收器是本機 C++、COM 還是托管 (.NET Framework),您可使用下列構造作為事件:

2016126151821045.png (426×192)

在事件接收器中使用 __hook 可將處理程序方法與事件方法關聯。請注意,使用 __event 關鍵字創建一個事件之后,將在調用此事件時調用后來掛鉤到它的所有事件處理程序。
__event 方法聲明不能具有定義;定義是隱式生成的,因此可將事件方法當做任何普通方法一樣調用。
System_CAPS_note注意
模板類或結構不能包含事件。
本機事件
本機事件是方法。返回類型通常是 HRESULT 或 void,但可以是任何整型(包括 enum)。當事件使用整數返回類型時,如果事件處理程序返回非零值,則會定義錯誤條件,在這種情況下,引發的事件將調用其他委托。

// Examples of native C++ events:__event void OnDblClick();__event HRESULT OnClick(int* b, char* s);

有關代碼示例,請參閱本機 C++ 中的事件處理。
COM 事件
COM 事件是接口。事件源接口中的方法的參數應為 in 參數(但這不是強制要求的),因為 out 參數在多播時無用。如果使用 out 參數,則將發出 1 級警告。
返回類型通常是 HRESULT 或 void,但可以是任何整型(包括 enum)。當事件使用整數返回類型并且事件處理程序返回非零值時,這是錯誤情況,此時引發的事件將中止對其他委托的調用。請注意,編譯器會自動將一個事件源接口標記為生成的 IDL 中的源。
COM 事件源的 __event 之后始終需要 __interface 關鍵字。

// Example of a COM event:__event __interface IEvent1;

有關代碼示例,請參閱 COM 中的事件處理。
托管事件
有關新語法中的編碼事件的信息,請參閱event(C++ 組件擴展)。
托管事件是數據成員或方法。當與事件一起使用時,委托的返回類型必須符合公共語言規范。事件處理程序的返回類型必須與委托的返回類型匹配。有關委托的詳細信息,請參閱 __delegate。如果托管事件是數據成員,則其類型必須是指向委托的指針。
在 .NET Framework 中,您可以將數據成員視為方法本身(即,其對應委托的 Invoke 方法)。您必須預定義用于聲明托管事件數據成員的委托類型。相反,如果尚未定義對應的托管委托,則托管事件方法將隱式定義它。例如,您可以將事件值(如 OnClick)聲明為下面所示的事件:

// Examples of managed events:__event ClickEventHandler* OnClick; // data member as event__event void OnClick(String* s); // method as event

隱式聲明托管事件時,您可以指定添加或移除添加或移除事件處理程序時將調用的 add 和 remove 訪問器。您還可以定義從類外部調用(引發)事件的方法。
示例:本機事件

// EventHandling_Native_Event.cpp// compile with: /c[event_source(native)]class CSource {public:  __event void MyEvent(int nValue);};

示例:COM 事件

// EventHandling_COM_Event.cpp// compile with: /c#define _ATL_ATTRIBUTES 1#include <atlbase.h>#include <atlcom.h>[ module(dll, name="EventSource", uuid="6E46B59E-89C3-4c15-A6D8-B8A1CEC98830") ];[ dual, uuid("00000000-0000-0000-0000-000000000002") ]__interface IEventSource {  [id(1)] HRESULT MyEvent();}; [ coclass, uuid("00000000-0000-0000-0000-000000000003"), event_source(com) ]class CSource : public IEventSource {public:  __event __interface IEventSource;  HRESULT FireEvent() {   __raise MyEvent();   return S_OK;  }};

示例:托管事件

// EventHandling_Managed_Event.cpp// compile with: /clr:oldSyntax /cusing namespace System;[event_source(managed)]public __gc class CPSource {public:  __event void MyEvent(Int16 nValue);};

將特性應用于事件時,您可以指定特性應用于生成的方法還是生成的委托的 Invoke 方法。默認值 (event:) 用于將特性應用于事件。

// EventHandling_Managed_Event_2.cpp// compile with: /clr:oldSyntax /cusing namespace System;[attribute(All, AllowMultiple=true)]public __gc class Attr {};public __delegate void D();public __gc class X {public:  [method:Attr] __event D* E;  [returnvalue:Attr] __event void noE();};


__raise
強調一個事件的調用站點。

__raise method-declarator;

備注
在托管代碼中,事件只能從定義它的類中引發。
說明
模板類或結構不能包含事件。
示例

 // EventHandlingRef_raise.cppstruct E {  __event void func1();  void func1(int) {}  void func2() {}  void b() {   __raise func1();   __raise func1(1); // C3745: 'int Event::bar(int)':              // only an event can be 'raised'   __raise func2();  // C3745  }};int main() {  E e;  __raise e.func1();  __raise e.func1(1); // C3745  __raise e.func2();  // C3745}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频一区二区三区…| 国产福利精品av综合导导航| 国产精品日韩在线| 国产精品高潮呻吟久久av野狼| 日本午夜精品理论片a级appf发布| 久久免费福利视频| 欧美丰满老妇厨房牲生活| 亚洲成人免费在线视频| 日韩成人xxxx| 久久久日本电影| 久久夜精品va视频免费观看| 91精品久久久久久久| 亚洲人成在线播放| 国产亚洲精品激情久久| 精品久久久国产精品999| 亚洲精品一区二区久| 亚洲激情第一页| 成人自拍性视频| 中文字幕视频在线免费欧美日韩综合在线看| 欧美一级片免费在线| 日韩精品在线视频| 久久99热这里只有精品国产| 国产精品久久久久久av下载红粉| 精品自拍视频在线观看| 热久久这里只有精品| 中文字幕在线看视频国产欧美在线看完整| 色综合男人天堂| 日韩在线精品视频| 中日韩美女免费视频网站在线观看| 欧美一二三视频| 77777亚洲午夜久久多人| 亚洲国产中文字幕久久网| 亚洲日本欧美中文幕| 久久精品亚洲一区| 91tv亚洲精品香蕉国产一区7ujn| 国产99久久精品一区二区| 俺也去精品视频在线观看| 亚洲欧洲在线观看| 久久久久久久久久久久久久久久久久av| 亚洲视频欧洲视频| 国产有码在线一区二区视频| 欧美在线视频一区| 日韩视频免费看| 日韩av在线不卡| 精品久久久久久久中文字幕| 久久综合国产精品台湾中文娱乐网| 久久精品美女视频网站| 亚洲永久在线观看| 自拍偷拍亚洲一区| 欧美日韩一区二区在线播放| 97超级碰碰人国产在线观看| 亚洲日本欧美日韩高观看| 日本精品免费观看| 日日狠狠久久偷偷四色综合免费| 国产美女被下药99| 亚洲桃花岛网站| 91国产中文字幕| 国产男女猛烈无遮挡91| 国产日韩在线视频| 国产国产精品人在线视| 97久久国产精品| 久久激情五月丁香伊人| 国产91精品高潮白浆喷水| 69久久夜色精品国产69乱青草| 欧美一区二区三区图| 日韩欧美中文免费| 欧美老女人bb| 欧洲中文字幕国产精品| 成人有码在线播放| 久久久久北条麻妃免费看| 欧美一级淫片丝袜脚交| 欧美午夜美女看片| 久久久精品一区二区| 亚洲最大av网| 日韩有码视频在线| 中文字幕欧美日韩精品| 久操成人在线视频| 亚洲精品国产精品国产自| 欧美一级片免费在线| 久久久999成人| 成人激情电影一区二区| 国产成人精品免费视频| 亚洲精品成人免费| 亚洲欧美日韩国产成人| 亚洲欧美制服第一页| 亚洲国产美女精品久久久久∴| 日韩av在线直播| 欧美激情亚洲另类| 亚洲欧美综合精品久久成人| 久久精品国产成人精品| 日韩av一卡二卡| 欧美性生活大片免费观看网址| 国产男人精品视频| 亚洲va码欧洲m码| 亚洲国产精品va在线看黑人| 日韩精品视频在线观看网址| 国产综合久久久久| 国模私拍一区二区三区| 午夜精品视频在线| 亚洲欧美一区二区三区情侣bbw| 日韩在线观看网站| 亚洲黄页视频免费观看| 狠狠做深爱婷婷久久综合一区| 国产精品男人的天堂| 精品亚洲一区二区三区在线观看| 精品久久久久久电影| 久热精品视频在线免费观看| 精品成人乱色一区二区| 97精品一区二区视频在线观看| 久久久久女教师免费一区| 亚洲第一国产精品| 欧美性视频网站| 欧美区在线播放| 国产精品91免费在线| 日韩美女在线观看一区| 亚洲韩国青草视频| 亚洲午夜未满十八勿入免费观看全集| 欧美大秀在线观看| 欧美日韩精品在线| 亚洲丝袜一区在线| 欧美xxxx做受欧美| 日韩中文字幕在线免费观看| 国产精品第3页| 国产成人精品视频在线观看| 国产日韩精品电影| 欧美成人精品在线视频| 亚洲人精选亚洲人成在线| 精品一区精品二区| 国产精品视频一区二区三区四| 国产精品手机播放| 国产亚洲一区二区精品| 亚洲2020天天堂在线观看| 日本欧美爱爱爱| 欧美激情成人在线视频| 最近2019中文字幕大全第二页| 国产欧美精品va在线观看| 亚洲黄页网在线观看| 国内外成人免费激情在线视频| 亚洲成人免费在线视频| 日韩在线视频导航| 91色琪琪电影亚洲精品久久| 国产精品久久久久久久av大片| 亚洲综合中文字幕在线观看| 日韩在线免费视频| 亚洲精品永久免费精品| 国产精品三级网站| 欧美视频精品一区| 色老头一区二区三区在线观看| 日韩少妇与小伙激情| 日韩精品欧美激情| 国产97色在线|日韩| 日韩成人在线播放| 日本亚洲欧美三级| 亚洲综合在线做性| 精品中文字幕久久久久久| 日韩av中文在线| 亚洲一区二区福利| 热久久美女精品天天吊色| 亚洲精品之草原avav久久| 成人a级免费视频| 亚洲精品第一国产综合精品| 91在线直播亚洲| 成人亲热视频网站| 欧美日韩激情小视频|