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
}