0

SetupDiGetDevicePropertyを使用しようとしていますが、setupapi.h内にそのような関数が見つからなかったようです。ドキュメントを見て、すべてのヘッダーファイルとライブラリファイルを含めましたが、関数を使用できません...どうなるのでしょうか。私が間違っているのは何ですか?コードは次のとおりです。

//Mainframe.cpp file
#include"DeviceManager.h"

int main()
{
    int iQuit;
    DeviceManager deviceManager;

    deviceManager.ListAllDevices();

    std::cin >> iQuit;

    return 0;
}

//DeviceManager.h file
#include <windows.h>
#include <setupapi.h>
#include <iostream>
#include <cfgmgr32.h>
#include <tchar.h>
#include <devpkey.h>

//#pragma comment (lib, "setupapi.lib")

class DeviceManager
{
public:
    DeviceManager();
    ~DeviceManager();

    void ListAllDevices();
};

//DeviceManager.cpp file
#include"DeviceManager.h"

DeviceManager::DeviceManager()
{
}

DeviceManager::~DeviceManager()
{
}

void DeviceManager::ListAllDevices()
{
    HDEVINFO deviceInfoSet;             //A list of all the devices
    SP_DEVINFO_DATA deviceInfoData;     //A device from deviceInfoSet
    DEVPROPTYPE devicePropertyType;
    //CONFIGRET device;
    DWORD deviceIndex = 0;
    DWORD size;
    TCHAR description[1024];
    bool foundAllDevices = false;

    deviceInfoSet = SetupDiGetClassDevs(NULL, TEXT("USB"), NULL, DIGCF_PRESENT|DIGCF_ALLCLASSES); //Gets all Devices

    deviceInfoData.cbSize = sizeof(deviceInfoData);

    while(SetupDiEnumDeviceInfo(deviceInfoSet, deviceIndex, &deviceInfoData))
    {
        deviceInfoData.cbSize = sizeof(deviceInfoData);

        ULONG tcharSize;
        CM_Get_Device_ID_Size(&tcharSize, deviceInfoData.DevInst, 0);
        TCHAR* deviceIDbuffer = new TCHAR[tcharSize];   //the device ID will be stored in this array, so the tcharSize needs to be big enough to hold all the info.
                                                        //Or we can use MAX_DEVICE_ID_LEN, which is 200

        CM_Get_Device_ID(deviceInfoData.DevInst, deviceIDbuffer, MAX_PATH, 0); //gets the devices ID - a long string that looks like a file path.

        SetupDiGetDeviceProperty(deviceInfoSet, deviceInfoData, DEVPKEY_NAME, devicePropertyType, description, sizeof(description), size, 0);

        std::cout << deviceIDbuffer << std::endl;

        deviceIndex++;
    }
}

SetupDiGetDeviceProperty関数は、ListAllDevices関数の下部で呼び出されます。

ありがとう

編集:申し訳ありませんが、エラーを記載するのを忘れました:IntelliSense:識別子"SetupDiGetDeviceProperty"は未定義です

4

1 に答える 1

2

SetupDiGetDevicePropertyドキュメントに記載されているように、Vista以降が必要です。WINVERしたがって、それに応じて定義する必要があります_WIN32_WINNT

#define WINVER 0x0600
#define _WIN32_WINNT 0x0600

私の推測では、プロジェクトは以前のバージョンのWindowsを対象としています。

または、プロジェクトオプションまたはコマンドラインで定義することもできます。詳細はこちら

それが答えではない場合、Vistaより前の古いバージョンのSDKを使用している可能性はありますか?

于 2012-05-13T18:33:40.033 に答える