none
Сложности при использовании HIDAPI C++ VISUAL STUDIO

    Вопрос

  • Добрый день. У меня стоит задача чтения ш/к с помощью HID устройства, конкретно USB сканер 

    Symbol LS-2208. Я взял за основу пример https://github.com/signal11/hidapi 

    Создал пустой проект с++ , файл заголовка указал hidapi.h , файл ресурсов hid.c , в котором указан вызов hid.dll   lib_handle = LoadLibraryA("hid.dll"); Компилирую под win32 , программа запускается, однако hid_enumerate которая должна вывести все HID устройства не возвращает ничего.

    int main(int argc, char* argv[])
     {
    using namespace std;
    int res;
    unsigned char buf[256];
    #define MAX_STR 255
    wchar_t wstr[MAX_STR];
    hid_device *handle;
    int i;


    #ifdef WIN32
    UNREFERENCED_PARAMETER(argc);
    UNREFERENCED_PARAMETER(argv);
    #endif
    struct hid_device_info *devs, *cur_dev;
    devs = hid_enumerate(0x093a, 0x2510);  // предполагаю, что начнет выводить с мыши
    cur_dev = devs;
    while (cur_dev) {
    printf("Device Found\n  type: %04hx %04hx\n  path: %s\n  serial_number: %ls", cur_dev->vendor_id, cur_dev->product_id, cur_dev->path, cur_dev->serial_number);
    printf("\n");
    printf("  Manufacturer: %ls\n", cur_dev->manufacturer_string);
    printf("  Product:      %ls\n", cur_dev->product_string);
    printf("  Release:      %hx\n", cur_dev->release_number);
    printf("  Interface:    %d\n",  cur_dev->interface_number);
    printf("\n");
    cur_dev = cur_dev->next;
    }

    hidapi.dll у меня нигде не фигурирует, возможно его необходимо указать в программе, и если да, то каким образом ?

    9 марта 2018 г. 17:36

Ответы

  • Я взял за основу пример https://github.com/signal11/hidapi 

    По ссылке, которую Вы привели, содержится исходный код библиотеки hidapi. Чтобы получить hidapi.dll, библиотеку требуется собрать. На главной странице проекта (помимо примера) имеется инструкция, как это сделать. Вы пошли другим путем, как я понял, а именно, включили файл исходного кода библиотеки hid.c непосредственно в свой проект. В этом случае корректность работы любой функции Вы можете просто проверить отладчиком. В частности, внутри функции hid_enumerate есть несколько ветвей, возвращающих NULL. Видимо, Вы его и получаете. А уж почему это происходит, выясняйте сами :)

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    11 марта 2018 г. 11:12

Все ответы

  • Проверил загрузку hid.dll и hidapi.dll следующим образом:

    HMODULE lib_call = NULL;
    lib_call = LoadLibraryA("C:\\Windows\\System32\\hid.dll");
    if (lib_call == NULL) cout << "Error calling DLL\n";
    else                  cout << "Calling DLL OK";

    В случае с hid.dll ошибки нет, а вот с hidapi.dll проблемы, может повреждена библиотека и как быть ?

    9 марта 2018 г. 18:58
  • Я взял за основу пример https://github.com/signal11/hidapi 

    По ссылке, которую Вы привели, содержится исходный код библиотеки hidapi. Чтобы получить hidapi.dll, библиотеку требуется собрать. На главной странице проекта (помимо примера) имеется инструкция, как это сделать. Вы пошли другим путем, как я понял, а именно, включили файл исходного кода библиотеки hid.c непосредственно в свой проект. В этом случае корректность работы любой функции Вы можете просто проверить отладчиком. В частности, внутри функции hid_enumerate есть несколько ветвей, возвращающих NULL. Видимо, Вы его и получаете. А уж почему это происходит, выясняйте сами :)

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    11 марта 2018 г. 11:12