一个简单的dll回调函数 例:
//c++ 一个简单回调函数(导出函数)
typedef void (WINAPI *StatusChangeFun)(int status);
StatusChangeFun statusChanged;
void WINAPI init_set(StatusChangeFun fun)
{
statusChanged = fun; //设置回调函数
}
//调用的时候
statusChanged(1);
statusChanged(2);
C# 四步
// c# 代码
public class Form1 : Form
{
//1 . 回调的函数声明
[UnmanagedFunctionPointerAttribute(
CallingConvention.StdCall,
CharSet = CharSet.Ansi)]
public delegate void StatusChangeProc(int status);
//2. 回调的设置函数
[DllImport(@"test.dll",
CharSet = CharSet.Ansi,
EntryPoint = "init_set",
CallingConvention = CallingConvention.StdCall)]
// 导入函数可以设置别名:
//public static extern void init_set(Delegate callback); //格式1
public static extern void init_set(StatusChangeProc callback); //格式2 (建议)
//3. 回调函数的定义(本体实现)
static void StatusChange(int status)
{
//状态变化
}
private void Form1_Load(object sender, EventArgs e)
{
//4. 回调函数的设置
//init_set((StatusChangeProc)StatusChange); //格式1,2都可用
init_set(StatusChange); //格式2
}
步骤2的参数 和 步骤1有关
步骤1, 3, 4 参数 互相有关