Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 7

Поиск пути к USB модему возвращает пустую строку

31.03.2019, 07:58. Показов 1001. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь програмно создать поиск порта модема.
Вот код:
Название модема выводится в Memo,
При попытке определения пути для CreateFile - выводится всего один символ и постоянно разный.
Длина DeviceInterfaceDetailData->DevicePath выводится правильная - 93 символа.
Подскажите где может быть ошибка.

Заранее спасибо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
GUID GUID_DEVCLASS_PORTS = {0x4d36e978, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18};
       GUID GUID_DEVINTERFACE_COMPORT = {0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73};
       GUID GUID_DEVINTERFACE_MODEM = {0x2C7089AA, 0x2E0E, 0x11D1, 0xB1, 0x14, 0x00, 0xC0, 0x4F, 0xC2, 0xAA, 0xE4};
       HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_MODEM, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE );
 
       if ( hDevInfo == INVALID_HANDLE_VALUE )
        {
        Memo1->Lines->Add("No USB Devices");
        return;
        }
 
       char dev_name[1024];
       char Buf[1024];
 
       SP_DEVICE_INTERFACE_DATA         spdid;
       SP_DEVINFO_DATA                  spdd;
       spdd.cbSize = sizeof(SP_DEVINFO_DATA);
       spdid.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
       Memo1->Lines->Add(spdid.cbSize);
       DWORD dwIndex = 0;
       //----------
           for(int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spdd); i++)
        {
            SetupDiGetDeviceRegistryPropertyA(hDevInfo, &spdd, SPDRP_FRIENDLYNAME, NULL, (UCHAR*)dev_name, sizeof(dev_name), NULL);
            Memo1->Lines->Add(dev_name);
        }
       //-------------
       while ( true )
       {
 
       if (SetupDiEnumDeviceInterfaces( hDevInfo, NULL, &GUID_DEVINTERFACE_MODEM, dwIndex, &spdid )==NULL)
        {
         Memo1->Lines->Add("Nothing");
         break;
        }
      unsigned long dwSize = 0;
      SetupDiGetDeviceInterfaceDetail( hDevInfo, &spdid, NULL, 0, &dwSize, NULL );
      Memo1->Lines->Add(dwSize);
      if (( dwSize != 0 ) && ( dwSize <= sizeof( Buf )))
      {
         PSP_DEVICE_INTERFACE_DETAIL_DATA pspdidd;
         pspdidd=(PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(dwSize);
         pspdidd->cbSize = sizeof( SP_INTERFACE_DEVICE_DETAIL_DATA ); 
         Memo1->Lines->Add(pspdidd->cbSize);
         ZeroMemory((PVOID)&spdd, sizeof(spdd));
         spdd.cbSize = sizeof(spdd);
 
         SetupDiGetDeviceInterfaceDetail(hDevInfo, &spdid, pspdidd, dwSize, &dwSize, NULL );
         Memo1->Lines->Add(dwSize);
         char m[1000];
         memset(m, 0, sizeof(m));
         memcpy(m, pspdidd->DevicePath, dwSize+1);
         Memo1->Lines->Add(m);
         }
         dwIndex++;
       }
 
        SetupDiDestroyDeviceInfoList(hDevInfo);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2019, 07:58
Ответы с готовыми решениями:

GetWindowModuleFileName возвращает пустую строку
Приветствую! Есть код, выводящий GetWindowModuleFileName и GetWindowText текущего окна: User32 user32 = User32.INSTANCE; char...

mysql_real_escape_string возвращает пустую строку
Есть форма, по заполнению которой производится insert запрос к бд. Но в БД попадают не все поля формы. Игнорируются те, которые...

Функция возвращает пустую строку
Здравствуйте. Скажу сразу в JS не силен. Мне нужно что бы функция вернула адрес строкой, но не знаю как правильно это сделать. Когда...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
31.03.2019, 11:50
SetupDiGetDeviceInterfaceDetail в 48-ой строке что возвращает? Если FALSE - то проверяем результат GetLastError().

Ну, и заодно: версия Билдера какая?
0
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 7
31.03.2019, 17:43  [ТС]
Версия билдера 6-я.
SetupDiGetDeviceInterfaceDetail в 48-ой строке возвращает false.
SetupDiGetDeviceInterfaceDetail в 37-ой строке тоже возвращает false.
Перебрал кучу вариантов, ставил якобы работающий код из форумов.
Результат всегда один - назвыние модема выдает а путь - ну никак.

Да, в header еще:
#include <devguid.h>
#include <setupapi.h>
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
31.03.2019, 18:09
Если функция
Цитата Сообщение от kk4sxd Посмотреть сообщение
возвращает false
, то ее результатам нет веры. Что говорит GetLastError сразу после вызова этой функции?
0
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 7
31.03.2019, 19:21  [ТС]
Ничего. Ошибок не выдает.

Добавлено через 43 минуты
Я ошибся -
SetupDiGetDeviceInterfaceDetail в 48-ой строке возвращает true.
SetupDiGetDeviceInterfaceDetail в 37-ой строке тоже возвращает true.
И соответственно ошибок не выдает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2019, 19:21
Помогаю со студенческими работами здесь

QString::toUtf8 возвращает пустую строку
Есть строка QString (не пустая, содержит энтеры. пробелы, бэкслеши, слэши и вообще всё, что только можно). Пробую преобразовать ее в...

Strtolower(String) возвращает пустую строку
Всех с наступающим новым годом! Ребята возник вопрос, может кто-то сталкивался. Есть строка, допустим : &quot;Сколько детей...

Now().DateString() иногда возвращает пустую строку
Добрый день! В программе предусмотен вывод информации о дате и времени Информацию получаю так TDateTime NowTime = Now(); ...

Метка тома возвращает пустую строку
Здравствуйте. У меня Windows 7, 64 bit. Метка тома возвращает пустую строку. В чем может быть проблема? Код: Dim Info As New...

Почему данный код возвращает пустую строку?
Добрый день! Почему данный код возвращает пустую строку? public class MyModel { public MyModel() { MyModel2= new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru