急!怪!Winio初始化失败

cdmaoli 2011-10-13 09:35:07
 事情是这个样子的:一加载了WinIor的VC程序,我编绎连接运行后,出现消息框“I/O端口初始化失败”。后我用别人的现有的程序(同样也是加载了winio的)在同一个硬件系统,同一个机器中运行,没有出现消息框(他的程序也有用if语句来判断InitializeWinIo是否初始化成功)。
 然后我这样试了一下,先运行别人的程序,运行后把别人的程序关掉后,再次运行我自己的程序,这次就没有再出现提示消息框“I/O端口初始化失败”。当我再次把我的程序关掉之后,再一次运行我自己的程序又出现了提示消息框
反复试了好多次都是同样的结果,先运行别人的程序后就不会出现消息框“I/O端口初始化失败”。若直接运行我的就会出现消息框,在程序中同样用了InitializeWinIo和ShutdownWinIo
 我不可能每次要运行我的程序时都要先运行别人的程序吧!这个是什么原因?
 不可能是WinIo加载不对的原因吧???
 这个怎么处理??
...全文
526 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2011-10-14
  • 打赏
  • 举报
回复
应该是你的初始化不正确。
ndy_w 2011-10-14
  • 打赏
  • 举报
回复
跟踪下。记得winio初始化时安装驱动,应该是安装驱动失败。
用户 昵称 2011-10-14
  • 打赏
  • 举报
回复
http://www.cnblogs.com/hesicong/archive/2008/12/11/1359048.html

看看这个管不管用

WinIO是一个能够打开一些操作系统IO特权操作的一个库,简单的来说它加载了一些驱动。通过加载的驱动可以直接的访问端口。在工控上,我们可以利用这个库直接操作IO卡的地址。例如我最近在做的一个数控钻铣床的IO卡和运动控制卡就是很老的一个卡,在WIN98下面工作很正常,但是在NT核心上就会出现非法指令调用的问题。这些非法指令来自于底层对IO卡和运动控制卡的直接地址访问。在98时代,这些操作都没有受到保护的,在NT核心下就会出现保护问题。经试验,经过WinIO初始化载入驱动以后再进行IO卡直接访问,很成功。但应用的时候,就出现了一些莫名其妙的问题。应用WinIO只需要调用两个函数InitializeWinIo(),和最后的ShutdownWinIo()即可。InitializeWinIo()将会返回一个bool值指示初始化结果。就是这个函数造成了许多困扰。第一次困扰是在一次调试中,经常初始化失败,一旦成功以后就总是成功的。刚开始以为是InitializeWinIo()以后没有ShutdownWinIoI()造成的,后来看了WinIO的C Example证明只写InitializeWinIo()一样能够进程一旦结束,由InitializeWinIo初始化的资源自然就结束了。所以不存在上次运行影响这次运行的事情。后来突然发现,WinIO相关的dll,vxd,sys竟然是绿色的。绿色在WindowsXP系统里面代表了文件是被EFS加密的。我为了工程的保密,把所有的工程目录都进行了EFS加密。EFS加密会影响磁盘性能,原因就在于其加解密过程。但是这里很奇怪,可能是间歇性的EFS解密速度没有跟上WinIO中加载驱动的速度,造成读取的sys和vxd设备驱动是混乱的,最终导致加载失败。将EFS加密取消,问题解决。第二次困找在我用C#写了一个dllimport,然后进行调用,结果,总是返回false。很疑惑,WinIO相关的文件都放到一起的,怎么还是这样的呢?VS2005单元测试里也会失败。究其原因还是路径的问题造成。

分析WinIO的源代码,可以发现InitializeWinIo()会调用一个GetDriverPath这个函数:
bool GetDriverPath()
{
PSTR pszSlash;
if (!GetModuleFileName(GetModuleHandle(NULL), szWinIoDriverPath, sizeof(szWinIoDriverPath))) return false;
pszSlash = strrchr(szWinIoDriverPath, ‘\\’);
if (pszSlash) pszSlash[1] = 0;
else return false;
strcat(szWinIoDriverPath, “winio.sys”);
return true; }

这里面已经很清楚的知道了什么情况下会false了。注意winio.sys存放的位置问题就能使之初始化正常。其实还可以更加详细的打印出InitializeWinIo()中每步的执行过程,这样更容易判断是哪个地方出现了问题。就先写到这里吧,WinIO是个很好很强大,很黄很暴力的一个库~~~
cdmaoli 2011-10-14
  • 打赏
  • 举报
回复
急求高手出现啊!!!
yuucyf 2011-10-14
  • 打赏
  • 举报
回复
帮忙顶下
lgstudyvc 2011-10-14
  • 打赏
  • 举报
回复
每接触过,说不明白阿
cdmaoli 2011-10-14
  • 打赏
  • 举报
回复
可不可以说明白一点噢!怎么初始化不正确啊,不是调用InitializeWinIo函数吗?这个还有别的要求!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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