wangwei
驱动牛犊
驱动牛犊
  • 注册日期2001-04-25
  • 最后登录2005-05-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2407回复:0

sos! vxd如何与win32应用程序通信

楼主#
更多 发布于:2001-04-25 11:16
    因为工作的需要,我需要为一块自制的数据采集卡编写数据采集驱动程序,我用的软件是Vtoolsd 和VC++ 6.0.
    我的思路是在win32应用程序中用一个线程,等待数据采集板的中断事件(50毫秒一次)
    
    DWORD WINAPI ServiceThread(PVOID Event)
    {
      while (TRUE)
      {
       // Wait for notification from VxD
        WaitForSingleObject((HANDLE)hEventR3, INFINITE);
       //
取由vxd中断程序取得的数据;
       }
      return 0;
     }

    在vxd中断服务中
    void HardintInt::OnHardwareInt(VMHANDLE hVm)
    {
           static WORD count=0; //中断计数
           从端口取数据
dout<<"Hardware int count:"<<count<<endl;
//向win32应用程序置事件
           //下面的代码是vtoolsd自带的例子w32intf使用事件的
           // 方法

           //if (hEventToNotifyApp)
//{
           //_VWIN32_SetWin32Event(hEventToNotifyApp);
//}
pInt->assert(hVm);
SetCarry();
     }

     //下面是OnW32DeviceIoControl的调用
     DWORD hardintDevice::OnW32DeviceIoControl(PIOCTRLPARAMS    pDIOCParams)
     {
     switch (pDIOCParams->dioc_IOCtlCode)
{
case DIOC_OPEN:
break;
case DIOC_CLOSEHANDLE:
break;
case W32IF_PASS_EVENT:
    dout<<"Hello world!"<<endl;
    hEventToNotifyApp = *(HANDLE*)
                             pDIOCParams->dioc_InBuf;
 
   ((DWORD*)(pDIOCParams->dioc_OutBuf))[0] =
                         (DWORD)&data;//由中断取到的数据

   pDIOCParams->dioc_bytesret = sizeof(DWORD);

}
return 0;
}

我的问题是
  一  中断事件如何设置,上述程序中我用的设置事件的方法是否正确.
  二  如何将在中断服务中每50ms采集到的数据,传送给win32应用程序.
  三  如何保证数据再传送的过程中不丢失,我用上面的方法中断丢失,数据在win32应用程序中采集不对.
  四  在中断频率较高,数据量较大的情况下,vxd和win32之间采用何种方法比较合理.
  
   各位高手请赐教,万分感谢,谢谢!!!
  

最新喜欢:

hongsinghongsi...
游客

返回顶部