阅读:2407回复:0
sos! vxd如何与win32应用程序通信
因为工作的需要,我需要为一块自制的数据采集卡编写数据采集驱动程序,我用的软件是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之间采用何种方法比较合理. 各位高手请赐教,万分感谢,谢谢!!! |
|
最新喜欢:hongsi... |