代码如下:
这段代码以前是没问题的,只不过我的系统被我重新安装了一次,可能我的设置被改变了,
但是我已经安装了winxp ddk,windows platform sdk,编译器的库路径也设了,应该没有问题才对,但现在不管怎样也编译不过,出错如下,哪位帮我编译一下看是否会跟我的问题一样,如何解决?
--------------------Configuration: DownMp3 - Win32 Release--------------------
Linking...
DownMp3Dlg.obj : error LNK2001: unresolved external symbol __imp__CM_Request_Device_EjectA@20
Release/DownMp3.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.DownMp3.exe - 2 error(s), 0 warning(s)
代码:
BOOL CDownMp3Dlg::RemoveUSBDeviceSafty()
{
     HDEVINFO  hDevInfo;  
       
     SP_DEVINFO_DATA  DeviceInfoData;  
     DWORD  i;  
 
     //--------------------------------------------------------------------------  
     //  获取设备信息  
     hDevInfo  =  SetupDiGetClassDevs((LPGUID)&GUID_CLASS_USB_DEVICE,  
             0,  //  Enumerator  
             0,  
             DIGCF_PRESENT    |  DIGCF_DEVICEINTERFACE  );  
     if  (hDevInfo  ==  INVALID_HANDLE_VALUE)  {  
             //  查询信息失败  
             //printf("ERROR  -  SetupDiGetClassDevs()");  
             return  1;  
     }  
     //--------------------------------------------------------------------------  
 
     //  枚举每个USB设备  
     DeviceInfoData.cbSize  =  sizeof(SP_DEVINFO_DATA);  
     for  (i=0;SetupDiEnumDeviceInfo(hDevInfo,  i,  &DeviceInfoData);i++)  
     {  
               LPTSTR  buffer  =  NULL;  
               PVOID  buffer2  =  NULL;  
               DWORD  buffersize  =  0;  
               ULONG  len;  
               CONFIGRET      cr;  
               PNP_VETO_TYPE  pnpvietotype;  
               CHAR  vetoname[MAX_PATH];  
 //  LPWSTR  vetoname=NULL;
               ULONG  ulStatus;  
               ULONG  ulProblemNumber;  
 
               cr  =  CM_Get_DevNode_Status(  &ulStatus,  
                                                                       &ulProblemNumber,  
                                                                       DeviceInfoData.DevInst,  
                                                                       0);  
               if  (  CR_SUCCESS  ==  cr  )  {  
                       //printf("OK  -  CM_Get_DevNode_Status()[%d]\n",  cr);  
                       //printf("OK  -  CM_Get_DevNode_Status()  sts  [%x]\n",  ulStatus);  
                       //printf("OK  -  CM_Get_DevNode_Status()  pro  [%x]\n",  ulProblemNumber);  
               }  else  {  
                       //printf("ERROR  -  CM_Get_DevNode_Status()[%d]\n",  cr);  
                       //printf("ERROR  -  CM_Get_DevNode_Status()[%d]\n",  GetLastError());  
               }  
               //  DN_DISABLEABLE  or  DN_REMOVABLE  
               if  ((DN_DISABLEABLE  &  ulStatus  )  !=  0  )  {  
                       //printf("HAS  -  DN_DISABLEABLE()[%x]\n",  DN_DISABLEABLE  &  ulStatus);  
               }  else  {  
                     continue;  
               }  
               if  ((DN_REMOVABLE  &  ulStatus  )  !=  0  )  {  
                       //printf("HAS  -  DN_REMOVABLE()[%x]\n",  DN_REMOVABLE  &  ulStatus);  
               }  else  {  
                     continue;  
               }  
 
               len  =  MAX_PATH;  
               cr  =  CM_Request_Device_Eject(          DeviceInfoData.DevInst,  
                                                       &pnpvietotype,  
                                                       vetoname,  
                                                       len,  
                                                       0 
                                                       );  
               if  (  CR_SUCCESS  ==  cr  )  {  
                       //printf("OK  -  CM_Request_Device_Eject()[%d]\n",  cr);  
               }  else  {  
                       //printf("ERROR  -  CM_Request_Device_Eject()[%d]\n",  cr);  
                       //printf("ERROR  -  CM_Request_Device_Eject()[%d]\n",  GetLastError());  
               }       }  
               
               
     if  (  GetLastError()!=NO_ERROR  &&  
               GetLastError()!=ERROR_NO_MORE_ITEMS  )  
     {  
             //  Insert  error  handling  here.  
 //printf("error!");
             return  1;  
     }  
               
     //    Cleanup  
     SetupDiDestroyDeviceInfoList(hDevInfo);  
     //printf("finished!\n");
     return  0;  
 
}

解决方案 »

  1.   

    删除usb设备:#include <tchar.h>
    #include <stdio.h>
    #include <windows.h>
    #include <devguid.h>#define DWORD_PTR DWORD
    #define ULONG_PTR DWORD
    extern "C" { 
    #include "hidsdi.h" 
    }
    // 需加入hid.lib#include <setupapi.h>
    // 需加入setupapi.lib#include <regstr.h>
    #include <winbase.h>#include <cfgmgr32.h>
    // 需要加入cfgmgr32.lib#include <initguid.h>
    //#include <usbiodef.h>
    DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,
      0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED);
    #define GUID_CLASS_USB_DEVICE           GUID_DEVINTERFACE_USB_DEVICEint main(int argc, _TCHAR* argv[])
    {
       HDEVINFO hDevInfo;
       
       SP_DEVINFO_DATA DeviceInfoData;
       DWORD i;   //--------------------------------------------------------------------------
       // 获取设备信息
       hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_CLASS_USB_DEVICE,
           0, // Enumerator
           0,
           DIGCF_PRESENT | DIGCF_DEVICEINTERFACE );
       if (hDevInfo == INVALID_HANDLE_VALUE) 
       {
           // 查询信息失败
           printf("ERROR - SetupDiGetClassDevs()");
           return 1;
       }
       //--------------------------------------------------------------------------   // 枚举每个USB设备
       DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
       for (i=0;SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData);i++)
       {
            LPTSTR buffer = NULL;
            PVOID buffer2 = NULL;
            DWORD buffersize = 0;
            ULONG len;
            CONFIGRET   cr;
            PNP_VETO_TYPE pnpvietotype;
            CHAR vetoname[MAX_PATH];
            ULONG ulStatus;
            ULONG ulProblemNumber;        cr = CM_Get_DevNode_Status( &ulStatus,
                                        &ulProblemNumber,
                                        DeviceInfoData.DevInst,
                                        0);
            if ( CR_SUCCESS == cr ) 
    {
                printf("OK - CM_Get_DevNode_Status()[%d]\n", cr);
                printf("OK - CM_Get_DevNode_Status() sts [%x]\n", ulStatus);
                printf("OK - CM_Get_DevNode_Status() pro [%x]\n", ulProblemNumber);
            } 
    else 
    {
                printf("ERROR - CM_Get_DevNode_Status()[%d]\n", cr);
                printf("ERROR - CM_Get_DevNode_Status()[%d]\n", GetLastError());
            }
            // DN_DISABLEABLE or DN_REMOVABLE
            if ((DN_DISABLEABLE & ulStatus ) != 0 ) 
    {
                printf("HAS - DN_DISABLEABLE()[%x]\n", DN_DISABLEABLE & ulStatus);
            } 
    else 
    {
               continue;
            }
            if ((DN_REMOVABLE & ulStatus ) != 0 ) 
    {
                printf("HAS - DN_REMOVABLE()[%x]\n", DN_REMOVABLE & ulStatus);
            }
    else 
    {
               continue;
            }        len = MAX_PATH;
            // pnpvietotype = PNP_VetoDevice; 
            cr = CM_Request_Device_Eject(
                                DeviceInfoData.DevInst,
                                &pnpvietotype,
                                vetoname,
                                len,
                                0
                                );
            if ( CR_SUCCESS == cr ) {
                printf("OK - CM_Request_Device_Eject()[%d]\n", cr);
            } else {
                printf("ERROR - CM_Request_Device_Eject()[%d]\n", cr);
                printf("ERROR - CM_Request_Device_Eject()[%d]\n", GetLastError());
            }   }
           
           
       if ( GetLastError()!=NO_ERROR &&
            GetLastError()!=ERROR_NO_MORE_ITEMS )
       {
           // Insert error handling here.
           return 1;
       }
           
       //  Cleanup
       SetupDiDestroyDeviceInfoList(hDevInfo);   return 0;
    }
      

  2.   

    谢谢您的回复,但是我编译时还是会出现:
    是我的环境哪里没设好呢?
    我已经安装了winxp ddk ,sdk,并且cfgmgr32.dll在windows\system32中也有了.
    到底是怎么了?
    --------------------Configuration: removusb - Win32 Debug--------------------
    Compiling...
    removusb.cpp
    Linking...
    removusb.obj : error LNK2001: unresolved external symbol __imp__CM_Request_Device_EjectA@20
    Debug/removusb.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.removusb.exe - 2 error(s), 0 warning(s)
      

  3.   

    是不是你的那个LIB库没有加入啊,
      

  4.   

    加到哪儿啊?我都加了啊,并且路径都指定好了啊.
    #include <tchar.h>
    #include <stdio.h>
    #include <windows.h>
    #include <devguid.h>#define DWORD_PTR DWORD
    #define ULONG_PTR DWORD
    extern "C" { 
    #include "hidsdi.h" 
    }
    // 需加入hid.lib
    #pragma comment(lib,"hid.lib")
    #include <setupapi.h>
    // 需加入setupapi.lib
    #pragma comment(lib,"setupapi.lib")
    #include <regstr.h>
    #include <winbase.h>#include <cfgmgr32.h>
    // 需要加入cfgmgr32.lib
    #pragma comment(lib,"cfgmgr32.lib")
    #include <initguid.h>
    //#include <usbiodef.h>
      

  5.   

    和其实是
    extern "C" { 
      #include "hidsdi.h" 
    }
    这个文件需要用c的编码方式,需要定义一下
      

  6.   

    你把这个文件\NTDDK\lib\i386\free\cfgmgr32.lib拷到工程目录中试试
      

  7.   

    To:chenjunge(狄克) 
    谢谢!
    我试过了.也是一样.
      

  8.   

    cfgmgr32.lib的文件路径,在vc里面没设置吧
      

  9.   

    已经设置了:
    如下:D:\WINDDK\2600\LIB\WXP\I386
      

  10.   

    CfgMgr32.lib Setupapi.libCfgMgr32.lib 一定放在 Setupapi.lib前面
      

  11.   

    你要把vc里面的路径设置,关于winddk的,都移到所有设置的最上面。
      

  12.   

    TO:jslisong(碧螺春)
    谢谢!
    但还是不行,我是这样的顺序.
    extern  "C"  {    
    #include  "hidsdi.h"    
    }  
    //  需加入hid.lib  #include  <cfgmgr32.h>  
    //  需要加入cfgmgr32.lib #include  <setupapi.h>  
    //  需加入setupapi.lib  #include  <regstr.h>  
    #include  <winbase.h>  
     
    #include  <initguid.h>  
    //#include  <usbiodef.h>  
    DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,  
       0xA5DCBF10L,  0x6530,  0x11D2,  0x90,  0x1F,  0x00,  0xC0,  0x4F,  0xB9,  0x51,  0xED);  
    #define  GUID_CLASS_USB_DEVICE                      GUID_DEVINTERFACE_USB_DEVICE  #pragma comment(lib,"cfgmgr32.lib") 
    #pragma comment(lib,"hid.lib")
    #pragma comment(lib,"setupapi.lib")
      

  13.   

    To: saliors(正在学习中) 
    非常感谢!
    不知道您是如何知道的呢?
    这是为什么?