0

晚上大家我想知道是否有人可以回答我 2 个快速问题。

我制作了一个与 arm 设备通信的应用程序,它工作正常,但是当我移动 PC 等时,我需要重新配置设备路径。它很长,如下所示。

小路:\\?\usb#vid_045e&pid_0040#6&ff454f2&0&3#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

我做了一些阅读,发现它有两个功能SetupDiGetClassDevsSetupDiGetDeviceInstanceId我需要。我的问题是我是否找对了地方,即这两个函数会返回上面的路径。另外这条路径的技术名称是什么?

我在下面的微软网站上找到了我认为是一个很好的例子(总是从例子中学到更好的东西),但这会引发错误C2440: '=' : cannot convert from 'HLOCAL' to 'LPTSTR' ,这是我的一个新错误指针错误?

这是代码

   #include <stdio.h>
   #include <windows.h>
   #include <setupapi.h>
   #include <devguid.h>
   #include <regstr.h>

   int main( int argc, char *argv[ ], char *envp[ ] )
   {
       HDEVINFO hDevInfo;
       SP_DEVINFO_DATA DeviceInfoData;
       DWORD i;

       // Create a HDEVINFO with all present devices.
       hDevInfo = SetupDiGetClassDevs(NULL,
           0, // Enumerator
           0,
           DIGCF_PRESENT | DIGCF_ALLCLASSES );

       if (hDevInfo == INVALID_HANDLE_VALUE)
       {
           // Insert error handling here.
           return 1;
       }

       // Enumerate through all devices in Set.

       DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
       for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
           &DeviceInfoData);i++)
       {
           DWORD DataT;
           LPTSTR buffer = NULL;
           DWORD buffersize = 0;

           //
           // Call function with null to begin with, 
           // then use the returned buffer size (doubled)
           // to Alloc the buffer. Keep calling until
           // success or an unknown failure.
           //
           //  Double the returned buffersize to correct
           //  for underlying legacy CM functions that 
           //  return an incorrect buffersize value on 
           //  DBCS/MBCS systems.
           // 
           while (!SetupDiGetDeviceRegistryProperty(
               hDevInfo,
               &DeviceInfoData,
               SPDRP_DEVICEDESC,
               &DataT,
               (PBYTE)buffer,
               buffersize,
               &buffersize))
           {
               if (GetLastError() == 
                   ERROR_INSUFFICIENT_BUFFER)
               {
                   // Change the buffer size.
                   if (buffer) LocalFree(buffer);
                   // Double the size to avoid problems on 
                   // W2k MBCS systems per KB 888609. 
                   buffer = LocalAlloc(LPTR,buffersize * 2); // ERROR LINE
               }
               else
               {
                   // Insert error handling here.
                   break;
               }
           }

           printf("Result:[%s]\n",buffer);

           if (buffer) LocalFree(buffer);
       }


       if ( GetLastError()!=NO_ERROR &&
            GetLastError()!=ERROR_NO_MORE_ITEMS )
       {
           // Insert error handling here.
           return 1;
       }

       //  Cleanup
       SetupDiDestroyDeviceInfoList(hDevInfo);

       return 0;
   }

希望它是一个简单的谢谢。

4

1 回答 1

0

您需要从以下位置转换返回值LocalAlloc()

buffer = (LPSTR) LocalAlloc(LPTR,buffersize * 2);

有关详细信息,请参阅MSDN 上的LocalAlloc()文档。

于 2012-07-25T02:02:54.993 回答