日期:2014-05-17  浏览次数:21240 次

如何用C#创建事件句柄传入C++写的驱动Dll?
C++写的驱动头文件如下:
ZT_API long _stdcall ZT518_OpenIRQ(unsigned long cardNO,
  long hEventSFifo,
  long hEventHFifoFewData,
  long hEventHFifoHalf,
  long hEventEI1,
  long hEventEI2,
  long hEventADFinish);

其中:
// hEventSFifo:是驱动缓冲区(SFIFO)到达阀值事件句柄
// 由用户建立一个事件,然后把事件句柄传入驱动,当SFIFO到达阀值事件产生后,
// 驱动会将这个事件设置为有信号状态,从而唤醒用户建立的用来等待的线程。
// 如果用户不需要用到多线程,请保持这个参数为0

不知道如何在C#创建事件句柄,并传入这个Dll函数?
  [DllImport("pm518.dll")]
  public static extern int ZT518_OpenIRQ(int cardNO,
  int hEventSFifo,
  int hEventHFifoFewData,
  int hEventHFifoHalf,
  int hEventEI1,
  int hEventEI2,
  int hEventADFinish);


------解决方案--------------------
C# code


[DllImport("pm518.dll")]
public static extern int ZT518_OpenIRQ(
  int cardNO,
  SafeWaitHandle hEventSFifo,
  ...
  );

AutoResetEvent eventSFifo = new AutoResetEvent(false);
//ThreadPool.RegisterWaitForSingleObject(eventSFifo.SafeWaitHandle, OnEventSFifo, null, 0, true);
OpenIRQ(cardNO, eventSFifo.SafeWaitHandle, ...);

------解决方案--------------------
探讨
不行,事件根本不能触发。