CALLBACK回呼函數使用之二

來源:互聯網
上載者:User

MSDN文章理解: 實現回呼函數

1. BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)表示此函數需要回呼函數的線索之一是存在lpEnumFunc參數.如果參數採用指向回呼函數的指標,其名稱中通常會有lp(長指標)首碼與Func尾碼的結合   2

2.建立託管回呼函數.該執行個體聲明一個名為Callback 委託類型,此委託類型採用兩個參數: hwnd和lparam. 第一個參數是視窗的控制代碼;第二個參數由應用程式定義. 回呼函數通常返回非零值表示成功,非零值表示失敗

3 建立一個委託,並將其作為參數傳遞給 EnumWindows 函數。平台叫用會自動將委託轉換為常見的回調格式。

4 確保在回呼函數完成其工作之前,記憶體回收行程不會回收委託。如果委託作為參數進行傳遞,或者所包含的委託作為結構中的欄位進行傳遞,則該委託在調用期間不會被回收。因此,正如下面的枚舉樣本所示,回呼函數會在調用返回前完成其工作,而無需託管調用方執行額外的操作。 然而,如果可以在調用返回後調用回呼函數,則託管調用方必須採取相應的措施來確保委託在回呼函數完成其工作之前不會被回收。

// A delegate type.
__delegate bool CallBack(int hwnd, int lParam);

// Managed type with the method to call.
__gc class EnumReport
{
// Report the window handle.
public:
    bool Report(int hwnd, int lParam) {
       Console::Write(L"Window handle is ");
       Console::WriteLine(hwnd);
       return true;
   }
};

[DllImport("user32")]
extern "C" int EnumWindows(CallBack* x, int y);

void main(void) {
    EnumReport* er = new EnumReport;
    CallBack* myCallBack = new CallBack(er, &EnumReport::Report);
    EnumWindows(myCallBack, 0);
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.