VXD高手请到此一游

beanworm 2000-03-28 05:23:00
小弟曾用VTOOLSD FOR WIN9X开发了一个处理硬件中断并从硬件端口读取数据的东东,由于实际应用中,中断间隔为10毫秒,数据量巨大,处理该数据所占用的内存资源也较多,且需要和RING3的应用程序共享那些内存区域,为简便起见,采用在VXD内分配内存,然后通过DeviceIoControl调用将这些内存指针传递给应用程序。我使用的是VLockedPageObject类为我的应用分配内存,虽然所分配的内存数量巨大,但通过我的实际使用看来,还是可以办得到的。在32位模式下,系统的内存空间为4G,从理论上而言,分配我所需要的这些内存毫无困难,但由于我所采用的是从系统全局堆中分配内存的方式(好象是这样,还望各位大侠不要见笑),且我的VXD为动态加载方式,这就使我产生了一些忧虑:
1、在系统资源充沛的情况下,是否我每一次加载和卸载驱动程序,系统都能准确无误地为我分配那些内存?每一次加载和卸载驱动程序时系统的工作流程又是怎样的?
2、要是系统无法提供我所要求的内存量,在加载驱动程序时,它会给出加载失败的信息呢,还是照分配我的要求分配,但分配的量却达不到我的要求,以致在访问这些内存时失败?如果是后一种情况,我该如何检测我的内存指针是否有效?
3、用VTOOLSD FOR WIN9X开发比DDK方便快捷,但不知为什么它不支持浮点运算,只要在表达式中有浮点数,链接则无法通过,那位大侠知道是什么原因,亦或是它本来就不支持浮点运算?
我的E—MAIL是liyt@ihw.com.cn,希望能得到各位高手的点拨,修得上乘绝技,也希望与众多的武林同道切磋技艺。
...全文
130 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
SkyVense 2000-03-28
  • 打赏
  • 举报
回复
紧急求救,Windows 98下端口I/O出怪事!

我正在编写一个数据采集程序(使用Visual C++6.0编程与数据采集卡进行端口通信),其通讯方式很简单:
先向310端口发初始化信号,通知仪器开始数据通讯,然后循环检测300端口,数据有效后读一个字节,然后再循环检测300端口,数据有效后再读下一个字节...,如此反复。
我使用的是VC的_inp()、_outp()函数来操作的,刚开始实验读少量数据是成功的,因为这是一种很可靠的通讯方式,所以我认为肯定没问题了!可是后来再实验接收大量数据时,问题出现了:每接收一段数据(大约一百多个字节),仪器就会莫名其妙的被重新初始化,又从头开始发送数据。
我以为是VC的_inp()、_outp()函数不好,就编了一个简单的动态加载Vxd进行I/O操作,以为这样不会再有问题了,可结果恰恰相反!
没办法了,只好又用Turbo C编了一个DOS程序,想在VC程序中需要通讯时调用一下,更奇怪的现象出现了:在纯DOS中,通讯一切正常,仪器没有被莫名其妙的重新初始化;可在Windows的DOS窗口中,却又出现了跟上面一样的问题!
这是为什么?还望各位高手指教!感激不尽!

张小峰
skyvense@online.sh.cn

6,847

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧