unique_ptr с кастомным делетером вызывающим IUnknown::Release. Но хочу ещё меньше бойлерплейта по созданию умных указателей из обычных указателей (а ещё проверка на ошибки) для каждого вызова метода этих COM-объектов.
Лучшее что смог придумать сейчас, тонны свободных функций вызывающих метод объекта и обрамляющие его этим ненавистным бойлерплейтом.
Хотелось бы как-то более красиво (ООП или UFCS для этих свободных функций, но его пока нет). Можно пронаследоваться от unique_ptr чтобы добавить к нему обернутые методы обернутого класса?
А почему бы не использовать CComPtr?
Потому что я не очень умный и не знал об этом. И изначальный автор кода с которым работаю - тоже не очень умен. И те, кто писал документацию на msdn. И те кто проектировал COM. Но в первую очередь - я. Спасибо, кажется, что это то, что нужно.
https://github.com/microsoft/wil/wiki/WinRT-and-COM-wrappers
Именно на этом пишут современный cpp-windows-код? Если да, то какой враппер выбрать (MFC/ATL/WIL/etc) чтобы оно работало минимум под 7-кой (для MFC вроде нужна поддержка со стороны ОС - про остальные не знаю) и органично вписывалось в современный плюсовый код?
WIL хорош, но, наверное, все же нет. https://github.com/microsoft/wil/issues/97#issuecomment-540369663
Вы не путайте понятия умный и опытный. Мы все не дураки тут. Но у каждого свой опыт, у кого то больше в одной теме, у кого то в другой .
Прошу прощения. Не хотел опять токсичить. Я хотел сказать, что есть некоторая проблема в том, что есть более совершенная технология, но даже сам факт её существования никак не афишируется (и пока напрямую не нагугил CComPtr не видел ни единого намека моей части Интернета на ATL или WIL), а большинство кода (как из реальных проектов, так и примеры с MSDN) используют легаси-подход из C++98 (а если идет речь про саму win32, то там вообще в С, но тут претензий уже меньше).
Я не в теме тут. Просто хотел узнать, что такое ATL? Про MFC я знаю это просто C++ обертка над winapi (которая изначально имеет С интерфейс )
Юник семантически не подходит для com
Если у кого-то есть опыт использования WIL'a, то просьба им поделиться. Особенно поддержка старых ОС интересует (про актуальный компилятор и winsdk понятно).
Обсуждают сегодня