Проблема с обнаружением USB-устройства с помощью функций PID и VID в VC ++ - PullRequest
1 голос
/ 01 июня 2011

Я пытаюсь разработать API для определения, подключено ли USB-устройство к моему USB-порту.Я использую MAX3420e в качестве USB-устройства, которое управляется через MSP430 uC.Я почти ничего не знаю о VC ++, и я читал USB complete, в котором упоминается пример кода о том, как обнаружить USB-устройство и связанные с ним функции ... Я написал небольшой код, который будет искать PID иVID подключенных USB-устройств ... однако я получаю следующую ошибку:

ошибка LNK2019: неразрешенный внешний символ "bool __cdecl HidD_GetAttributes (void *, struct _HIDD_ATTRIBUTES *)" (? HidD_GetAttributes @@AA_NUTAID @@AA_TRBID @@@ Z) ссылка на функцию _wmain

Может кто-нибудь, пожалуйста, дайте мне знать, где я буду не так ??спасибо ...

// usb-complete-3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "winusb.h"
#include "Usb100.h"
#include "Setupapi.h"

HANDLE  hDevInfo;
GUID    HidGuid;

SP_DEVICE_INTERFACE_DATA            devInfoData;
int MemberIndex;
LONG Result;
//SP_DEVICE_INTERFACE_DATA          devInfoData;
HANDLE                              DeviceHandle;
ULONG                               Length;
ULONG                               Required;
PSP_DEVICE_INTERFACE_DETAIL_DATA    detailData;

typedef struct _HIDD_ATTRIBUTES {
ULONG Size;
USHORT VendorID;
USHORT ProductID;
USHORT VersionNumber; }
HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES;


void HidD_GetHidGuid(OUT LPGUID HidGuid )
{};

void *SetupDiGetClassDevs(
IN LPGUID ClassGuid, OPTIONAL
IN PCTSTR Enumerator, OPTIONAL
IN HWND hwndParent, OPTIONAL
IN DWORD Flags){return (0);}



void *SetupDiEnumDeviceInterfaces(
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
IN LPGUID InterfaceClassGuid, 
IN DWORD MemberIndex,
OUT PSP_DEVICE_INTERFACE_DATA
DeviceInterfaceData ){return (0);}


bool
HidD_GetAttributes(IN HANDLE HidDeviceObject,OUT PHIDD_ATTRIBUTES Attributes) ;


WINSETUPAPI
BOOL
WINAPI
  SetupDiGetDeviceInterfaceDetail(
    IN HDEVINFO  DeviceInfoSet,
    IN PSP_DEVICE_INTERFACE_DATA  DeviceInterfaceData,
    OUT PSP_DEVICE_INTERFACE_DETAIL_DATA  DeviceInterfaceDetailData,  OPTIONAL
    IN DWORD  DeviceInterfaceDetailDataSize,
    OUT PDWORD  RequiredSize,  OPTIONAL
    OUT PSP_DEVINFO_DATA  DeviceInfoData  OPTIONAL
    );


int _tmain(int argc, _TCHAR* argv[])
{
    while(1)
    {
        HIDD_ATTRIBUTES Attributes;

        HidD_GetHidGuid(&HidGuid);

        hDevInfo=SetupDiGetClassDevs (&HidGuid,NULL, NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE); //get the device information

        devInfoData.cbSize = sizeof(devInfoData);

        SetupDiEnumDeviceInterfaces(hDevInfo,0,&HidGuid,MemberIndex,&devInfoData); // check for the enumerated devices

        // The call will return with a "buffer too small" error which can be ignored.

        Result = SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,NULL,0,&Length,NULL);// Allocate memory for the hDevInfo structure, using the returned Length. 

        detailData =(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);

        // Set cbSize in the detailData structure.
        detailData -> cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);// Call the function again, this time passing it the returned buffer size.

        Result = SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,detailData,Length,&Required, NULL);

        // Set the Size member to the number of bytes in the structure.
        Attributes.Size = sizeof (Attributes) ;

        HidD_GetAttributes(DeviceHandle,&Attributes);  // get the PID and VID of the devices connected

    }
    return 0;
}

1 Ответ

2 голосов
/ 21 августа 2012

Поместите setupapi.lib в качестве дополнительной зависимости на вкладке ввода компоновщика.

...