我现在在C++中有这样一个函数
typedef int (CALLBACK* DS_SNAP_PROC)(BYTE *pImageBuffer);
我在另外一个函数要用到DS_SNAP_PROC来定义另一个参数如:
CameraInit(DS_SNAP_PROC pCallbackFunction, IN DS_RESOLUTION uiResolution, IN HWND hWndDisplay, IN LPVOID lpThreadparam );然后我要在C#中通过调用dll函数库的办法来调用CameraInit函数,但是我现在不知道如何在C#中定义
“DS_SNAP_PROC pCallbackFunction”参数,请高手们指教指教呀,急!谢谢。
typedef int (CALLBACK* DS_SNAP_PROC)(BYTE *pImageBuffer);
我在另外一个函数要用到DS_SNAP_PROC来定义另一个参数如:
CameraInit(DS_SNAP_PROC pCallbackFunction, IN DS_RESOLUTION uiResolution, IN HWND hWndDisplay, IN LPVOID lpThreadparam );然后我要在C#中通过调用dll函数库的办法来调用CameraInit函数,但是我现在不知道如何在C#中定义
“DS_SNAP_PROC pCallbackFunction”参数,请高手们指教指教呀,急!谢谢。
[DllImport("coredll.dll", EntryPoint = "waveInOpen", SetLastError = true)]
private static extern int waveInOpen(ref IntPtr t, uint id, ref WaveFormat_GSM pwfx, WAVEINPROC dwCallback, uint dwInstance, uint fdwOpen);
public delegate void WAVEINPROC(IntPtr hdrvr, int uMsg, int dwUser, ref WaveHdr wavhdr, int dwParam2);
WAVEINPROC waveinproc;
private void Form1_Load(object sender, EventArgs e)
{
waveinproc = onwaveinproc;
}
private void onwaveinproc(IntPtr hdrvr, int uMsg, int dwUser, ref WaveHdr wavhdr, int dwParam2)
{
//
} 例如这个,DLL API waveInOpen中WAVEINPROC dwCallback是一个函数指针,当然在C中并不是WAVEINPROC这个类型,WAVEINPROC是C#中定义的一个delegate,可以作为函数指针。WAVEINPROC waveinproc指向了onwaveinproc这个方法(函数),这样DLL中回调该函数指针指向的方法(函数)时,就是回调onwaveinproc。
{
struct DS_RESOLUTION
{
//
}
delegate int DS_SNAP_PROC(byte[] pImageBuffer);
static DS_SNAP_PROC ds_snap_proc;
[DllImport("yourdll")]
static extern void CameraInit(DS_SNAP_PROC pCallbackFunction, ref DS_RESOLUTION uiResolution, ref IntPtr hWndDisplay, ref IntPtr lpThreadparam );
static void Main(string[] args)
{
ds_snap_proc = CallBack;
DS_RESOLUTION resolution;
//
IntPtr hwnddisplay = IntPtr.Zero;
IntPtr lpthreadparam = IntPtr.Zero;
CameraInit(CallBack, ref resolution, ref hwnddisplay, ref lpthreadparam);
Console.ReadLine();
}
static int CallBack(byte[] b)
{
//
return 1;
}
}