我用MFC建立了一个基于对话框的程序,然后我将WINIO程序的LIB文件加载进了我的工程,然后我在对话框的初始化函数中调用了InitializeWinIo函数,但奇怪的是该函数的返回值始终是0,即是说初始化不能成功,而我用WINIO包中的WIN32示例程序是可以初始化的,这就怪了,难道WINIO程序的提供的动态链接库不能在MFC中使用,应该不会吧,请你帮忙分析一下指出原因,谢谢您!

解决方案 »

  1.   

    对这个包不熟, 是不是 COM 的东西AfxOleInit(); 加上这句试试(在初始化之前)
      

  2.   

    将lib文件和.h文件加入工程#include "winio.h"
      

  3.   

    把winio.dll winio.vxd winio.sys放到debug目录下
      

  4.   

    谢谢小三,问题解决了,再请问一下,为什么要把winio.dll winio.vxd winio.sys放到debug目录下?这样不是很麻烦,如果我将debug目录删除了,下次重新编译不是又要将winio.dll winio.vxd winio.sys这三个文件重新加一次。为什么不可以把这三个文件就放到工程目录下!请你解答这几个问题,感谢!
      

  5.   

    再请问一下,WINIO程序在安全性这个问题上面控制得怎么样?有没有什么安全隐患?谢谢!
      

  6.   

    再向各位大哥请教一点,我现在做了这样一个测试:
    DWORD test;
    SetPortVal(0x378, 10, 4);
    GetPortVal(0x378, &test, 4);
    printf("test=%d",test);
    奇怪的是最后得到的结果不是test=10,而是test=-4161782
    然后我将SetPortVal函数和GetPortVal函数的最后一个参数改为2后,
    得到的结果是:test=32522
    最后我将SetPortVal函数和GetPortVal函数的最后一个参数改为1后,
    得到了正确结果:test=10
    请问在SetPortVal函数和GetPortVal函数的最后一个参数为2或4的时候,数值10是写入错误还是读出错误?为什么会出现这样的错误?如何解决?谢谢!
      

  7.   

    好像没办法把winio.dll winio.sys放在工程目录下,因为程序会在环境变量path、c:\windows\system32目录和可执行程序的目录中查找它们。你要是想不用每次都把winio.dll winio.sys拷一遍,就把它们放到c:\windows\system32目录下吧!winio的安全性--这样说吧!winio是不能同时被两个或以上的程序调用的,也就是说当你调用winio的程序启动之后,其它也要调用winio的程序再启动就会初始化winio失败。winio是直接和硬件打交道的,做不好会死机甚至破坏硬件都是有可能的。呵呵!安全性掌握在你自己手里。关于显示的问题,我想你的打印语句应该改成
    printf("test=%u",test);
    因为从端口读来的值都是无符号数,你按有符号数来显示的话(DWORD中bit31是符号位)当然不对咯^_^
      

  8.   

    zkxz,谢谢你的帮助,我按照你说的那样将printf("test=%d",test)改为了
    printf("test=%u",test),而且test数据类型也改为了unsigned long,打印结果从原来test=-4161782变为了test=4290805514,也不是正确答案test=10.请问为什么?
      

  9.   

    To jsfun(海岸线) ,
    我按照的你的代码将SetPortVal函数和GetPortVal函数的最后一个参数改为1后,也得不到10,仍然得到的是4294967295,也就是16进制的0xFFFFFFFF。就是说寄存器0x378读取不成功或不能读取。你先确定0x378是什么端口,能不能随便读写,最好换个端口试试。