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

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

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;     } }

转载于:https://www.cnblogs.com/shanfeng/p/4394660.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值