[转帖]C#如何调用非托管函数(三)-实现回调函数
作者:作者不详  发布日期:2011/06/12 17:50:16
[转帖]C#如何调用非托管函数(三)-实现回调函数

部分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/liuwu/archive/2009/09/26/1574619.html


参考:



本文来源:



C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


上一篇 下一篇