部分dll函数是需要回调的,因此我们在托管代码中调用的时候,必须先创建回调函数,然后将该函数的指针作为参数传递给dll函数。
以下以EnumWindows函数为例,演示了使用回调函数的方法:
一 找到函数签名
EnumWindows具有以下签名: BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
其中 lpEnumFunc 就是应用程序定义的回调函数的指针:BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam);
二 创建托管回调函数
可以用委托类型来定义回调函数,如:public delegate bool CallBack(int hwnd, int lParam);
三 创建一个委托,并将其作为参数传递给 EnumWindows 函数
平台调用会自动将委托转换为常见的回调格式。如:
public delegate bool CallBack(int hwnd, int lParam); 
 public class EnumReportApp { 
     [DllImport("user32")]     public static extern int EnumWindows(CallBack x, int y); 
     public static void Main()      {         CallBack myCallBack = new CallBack(EnumReportApp.Report);         EnumWindows(myCallBack, 0);     } 
    public static bool Report(int hwnd, int lParam) {          Console.Write("Window handle is ");         Console.WriteLine(hwnd);         return true;     } }
原文:http://www.cnblogs.com/shanfeng/p/4394660.html