using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

 

namespace MyDelegate
{
    #region 委托实现回调函数

    public delegate bool CallBack(int hwnd, int lParam);

    public class EnumReportApp
    {
        [DllImport("user32")]
        //user32.dll中的Win32函数原型为:
        //BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
        //表示此函数需要回调的线索之一是存在 lpEnumFunc 参数。如果参数采用指向回调函数的指针,其名称中通常会有 lp(长指针)前缀与 Func 后缀的组合。
        //这里在导入user32.dll后,引入该函数,但是已经将其第一个参数传入了这里定义的委托函数CallBack
        public static extern int EnumWindows(CallBack x, int y);

        public static bool Report(int hwnd, int lParam)
        {
            Console.Write("Window handle is ");
            Console.WriteLine(hwnd);
            return true;
        }

        public static void Main()
        {
            //实例化一个委托,其实现为上面定义的Report,即调用myCallBack时就是调用了Report
            CallBack myCallBack = new CallBack(EnumReportApp.Report);
            //从这个.NET程序中调用外面user32.dll中的Win32的函数,但是该函数 “向回调用(回调)”刚刚定义的.NET程序中的函数myCallBack
            EnumWindows(myCallBack, 0);//enumwindows是winapi函数而mycallback指向这里的report方法
            Console.ReadLine();
        }
    }

    #endregion
}

posted on 2010-06-30 11:32  TsingCai  阅读(2041)  评论(0编辑  收藏  举报