2009年10月1日星期四

C#中的回调函数安装到C语言DLL中

例如,C语言编译的DLL中有个定时器,每过一定的时间产生一个TimeChange,但是当TimeChange发生后的具体处理,要在C#中实现。即将C#中的具体回调函数,安装到C编译的DLL中的TimeChange中。看下面的例子。

///pure C DLL
#include "windows.h"
#define DLLEXPORT __declspec(dllexport)

extern "C"
{
DLLEXPORT int __stdcall timeChange(void (*onTimeChange)())
{
return onTimeChange();
}
}

///C#
class DLL
{
[DllImport"ctimechange.dll", CallingConvention = CallingConvention.StdCall)]
public static extern int timeChange(DOnTimeChange cb);

public delegate int DOnTimeChange();

public static void main()
{
DOnTimeChange cb = new DOnTimeChange(OnTimeChange);
timeChange(cb);
}

public static void OnTimeChange()
{
console.write("time changed");
}
}

没有评论:

发表评论