您的位置:首页 > 编程语言 > C#

c# 如何调用非托管函数3-实现回调函数

2009-09-26 20:19 330 查看
原文: 刘武|c# 如何调用非托管函数3-实现回调函数

部分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 函数

平台调用会自动将委托转换为常见的回调格式。如:


C#-Code:
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;
}
}


参考:

c# 如何调用非托管函数
c# 如何调用非托管函数2-传递结构和类
如何:实现回调函数
EnumWindows Function
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: