Добрый день!
Пишу библиотеку-обертку для функций работы с драйвером WinUSB. Для получения данных о подключенный устройствах использую средства библиотеки SetupAPI.dll.
Столкнулся с такой проблемой. Непосредственно из консольного приложения вызов всех необходимых функций проходит без каких-либо запинок, все работает, пересылается и определяется. Но как только я пытаюсь получить доступ к функции, например,
SetupDiGetClassDevs происходит ошибка выполнения программы:
Unhandled exception at 0x000259a6 in TestDLL.exe: 0xC0000005: Access violation reading location 0x000259a6.Используя тот же код в проекте DLL, поменяв тип приложения с DLL на EXE и выбрав подсистему консоли вызываю эту же функцию в функции _tmain - все работает корректно. То есть ошибка возникает только при попытке сквозного вызова через DLL. Подскажите пожалуйста в чем может быть проблема, может быть кто-то уже сталкивался с этим случаем или подобным ему.
Упреждая некоторые советы:
1. Нагуглил где-то что надо заменить название функции
SetupDiGetClassDevs добавив в конце W для использования с символами Unicode ибо в setupapi.dll такой функции нет. Пробовал - ни замена на A, ни замена на W не помогла.
2.
GUID guidDeviceInterface = { 0xf4765f40, 0xd4e5, 0x4f52, { 0xb0, 0x57, 0x74, 0xcd, 0x1b, 0x4c, 0xeb, 0xc3 } };
HDEVINFO hDeviceInfo;
hDeviceInfo = SetupDiGetClassDevs(&guidDeviceInterface,NULL,NULL,DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
Вот так выглядит вызов самой функции на которой происходит падение. Пробовал заменить точный GUID на NULL для перечисления всех устройств, не помогло. Ошибка видимо в самом вызове функции.
При необходимости могу предоставить более полные листинги программы или другую информацию, если это позволит прояснить картину более четко.
Заранее благодарен за помощь!