我的动态库中调用了SetupDiGetClassDevs函数,这是一个API函数,声明在SetupApi.h中。
在2k下,调用动态库,当调用SetupDiGetClassDevs时,完全没问题。但是在Win98下,
当调用到SetupDiGetClassDevs时,返回-1,错误码为120,查了一下意思是“
此功能仅在win32模式下有效”。
有没有和我遇到相同问题的朋友,你们是怎么解决的?

解决方案 »

  1.   

    to DentistryDoctor:
       SetupDiGetClassDevs在98下,如果不是通过dll调用的,而是用应用程序直接调用的话,是没有问题的
    ,这一点我已验证。所以,这个api在98下应该是支持的,并且msdn上将的也是支持的。
      

  2.   

    需要安裝平台開發包Platform SDK,大小是630M左右,你就可以認識SetupDiGetClassDevs這個函數了.
      

  3.   

    需要引入Setupapi.lib文件到工程。
      

  4.   

    to freeze2008:
      不是找不到SetupDiGetClassDevs这个函数,编译、连接都能过,说明能找到。
    在运行时,调用SetupDiGetClassDevs(NULL,NULL,NULL,DIGCF_PRESENT|DIGCF_ALLCLASSES)返回
    -1,所以是运行时出错。
      

  5.   

    tokugou123:
       setupapi.lib肯定要引入工程的,否则连接时会出错的。
      

  6.   

    我明白啊,不信你試試AnimateWindow這個函數,在沒有安裝platform SDK時也和你的情況差不多,安裝好了之後就行了,或者你可以試試其他類似的函數吧.
      

  7.   

    我装了sdk。可是我如果对SetupDiGetClassDevs的直接调用,就没有问题,执行结果也正确。
    但是,知道把对这个函数的调用放到动态库中,在来调用动态库就会有问题,跟踪表明,SetupDiGetClassDevs的执行出错了。真是没道理啊!
      

  8.   

    好像和操作系统有关,起码我的代码在win2k和xp下都是正常运行的,到了98下就不行了。
    98下调用dll和2k、xp下究竟有什么不同呢?
      

  9.   

    98下面你可以看看你調用的DLL關聯的DLL有那些,我想很可能就是OS所造成的,畢竟98是很老的操作系統,所以.......
      

  10.   

    如果不通过dll调用,直接用应用程序调用的话,是没有问题的,这个api在98下应该是支持的,并且msdn上将的也是支持的。
      

  11.   

    不过我想也不应该是DLL调用方式不同的问题。
      

  12.   

    先MARK一下,回来看讨论结果,这个不会!!
      

  13.   

    问题解决了,对于SetupDiGetClassDevs函数的调用,在2k和xp下编译时,要定义UNICODE。
    在98下,反而不能定义UNICODE。所以在编译时通过工程设置,决定是否定义UNICODE就可以了。
    发分。谢谢各位了。