阅读:1633回复:6
在其他驱动中调用触摸屏禁止函数不成功!高手指点一下。
VOID (*pTouchPanelDisable)(void);
... . . VOID DDDDD(VOID) { . . HINSTANCE hinstance = NULL; hinstance =LoadLibrary(_T("touch.dll")); if(hinstance!=NULL) { pTouchPanelDisable = (VOID(*)(void))GetProcAddress(hinstance, _T ("TouchPanelDisable")); if (pTouchPanelDisable != NULL) { RETAILMSG(1,(TEXT("TouchPanelDisable\r\n"))); (*pTouchPanelDisable)(); } } FreeLibrary(hinstance); . . } 已经打印了RETAILMSG(1,(TEXT("TouchPanelDisable\r\n")))中输出,但就是没有真正跑到触摸屏驱动的TouchPanelDisable中运行。为什么? |
|
沙发#
发布于:2008-01-15 16:31
可以调用InterruptMask(Sysint, TRUE)屏蔽掉TouchSysInt和TouchChangeSysInt;需要恢复TouchPanel的功能时再调用InterruptMask(Sysint, FALSE)取消中断屏蔽就可以了。
|
|
板凳#
发布于:2008-01-16 10:48
引用第1楼wd1394于2008-01-15 16:31发表的 : 这样是可以,但是会出现麻烦的, 需要在Touchplane处理中规避这边屏蔽,那边重新使能的现象 |
|
|
地板#
发布于:2008-01-16 10:50
谢谢wd1394,那有什么好办法在其他驱动中获得触摸屏驱动被分配的SYSINT呢?
|
|
地下室#
发布于:2008-01-16 11:08
引用楼主qinlei_sz于2008-01-15 16:17发表的 在其他驱动中调用触摸屏禁止函数不成功!高手指点一下。 : 呵呵, Touchplane 这部分的驱动并不是一个完整的驱动, DLL引出的接口是给GWE调用的; 针对驱动有两种方法: 1、重新引出一个接口 2、使用使用实名EVENT (CreatEvent,SetEvent,EVENT_NAME 不能NULL, 接受的、发送必须同名,名字必须唯一) 这两中都要你在Touchplane驱动中做一些屏蔽Touchplane功能的处理: 1、不屏蔽中断, 只是在Sample中做无效处理(不采样,直接无效处理) 2、屏蔽中断,完全禁止Touchplane的功能: 这种会节约系统CPU处理资源;具体硬件,具体修改 |
|
|
5楼#
发布于:2008-01-16 13:44
引用第3楼qinlei_sz于2008-01-16 10:50发表的 : 可以用DrvGlob来传递。 |
|
6楼#
发布于:2008-01-16 13:49
引用第2楼thinkerwin于2008-01-16 10:48发表的 : TouchPanel驱动中不需要任何额外的处理,关键是要规划好什么时候要屏蔽TouchPanel,什么时候要恢复TouchPanel。而当前TouchPanel是否被屏蔽的状态可以用DrvGlob来保存。 |
|