Как API переносного устройства Windows (WPD) может использоваться программой, скомпилированной с помощью MingW?

Я пишу программу, которая автоматизирует некоторые задачи, которые необходимо выполнить при обнаружении съемного устройства. Изначально использовались только файловые потоки. Когда я понял, что не все съемные устройства могут быть доступны таким образом, я начал использовать SHFileOperation, но теперь я понял, что некоторые устройства не могут быть доступны даже с помощью этого метода.

Я хочу использовать WPD API, но моя программа компилируется с использованием MingW, а библиотеки, которые она использует, компилируются также с использованием MingW. Единственные две возможности, которые я вижу, — это перекомпилировать все для Visual C ++ (я хочу избежать этого, если это возможно) или написать небольшую библиотеку-оболочку, которая будет компилироваться как DLL и которая экспортирует только функции и может быть легко связана с программой, скомпилированной с помощью MingW. даже если сама DLL была скомпилирована с Visual C ++ (поэтому она может использовать WPD API).

Например, если кто-то знает библиотеку, в которой уже есть WPD, это сэкономит мне много времени.

1

Решение

Я не думаю, что вы найдете какие-либо общие обертки для WPD, поскольку API предоставляет COM-интерфейсы, к которым можно получить доступ непосредственно из MinGW. Проблема в том, что нет совместимых с MinGW заголовков, объявляющих интерфейсы и связанные типы. Есть несколько возможных решений, которые не связаны с использованием компилятора Microsoft:

  • Напишите ваши собственные совместимые с MinGW заголовки. Если вы можете сделать это исключительно из документации, не ссылаясь на заголовки Microsoft, вы можете отправить их для добавления в пакет w32api, чтобы другие могли их использовать.
  • Скопируйте версию заголовков Windows SDK и удалите все ненужные файлы, которые мешают их компиляции с GCC. Старые версии заголовков из старых SDK будут иметь меньше мусора для удаления.
  • Создайте заголовки, которые обертывают заголовки SDK, и используйте макросы для устранения ненужных.
  • Используйте интерфейсы OLE Automation для WPD. Все интерфейсы COM, необходимые для этого (в основном IDispatch) поддерживаются MinGW. Документация Windows SDK кратко адреса этот вариант.
1

Другие решения


По вопросам рекламы [email protected]