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:
参考:
c# 如何调用非托管函数
c# 如何调用非托管函数2-传递结构和类
如何:实现回调函数
EnumWindows Function
部分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
相关文章推荐
- c# 如何调用非托管函数3-实现回调函数
- AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法的?
- C#调用外部exe作为子窗体或UI? VC++如何实现呢呢?...札记plus
- [转载]C#如何实现对外部程序的动态调用
- c# 如何调用非托管函数 (转)
- C#抽象类可以有构造方法吗,若是有如何实现及调用?
- c# 如何调用非托管函数2-传递结构和类
- AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法的?
- c#调用C++写的dll导出类,如何实现
- c#中如何在cshtml页面实现js调用cs变量(mvc模式)
- 如何实现C++调用C#的dll方法教程
- (转)AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法?
- c#调用c++带有回调函数方法的实现
- 如何:实现和调用自定义扩展方法(C# 编程指南)
- 如何在非托管C++中调用托管C#中的回调函数
- (转)AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法?
- c# 调用c++带有回调函数方法的实现
- AjaxPro实现机制探讨——Ajax是如何调用服务器端C#方法的?
- c# 调用c++带有回调函数方法的实现
- C# 如何调用 C++ DLL中的函数接口和回调函数