170 похожих чатов

У меня есть вопрос про unique_ptr: Я сейчас оборачиваю COM-объекты в

unique_ptr с кастомным делетером вызывающим IUnknown::Release. Но хочу ещё меньше бойлерплейта по созданию умных указателей из обычных указателей (а ещё проверка на ошибки) для каждого вызова метода этих COM-объектов.
Лучшее что смог придумать сейчас, тонны свободных функций вызывающих метод объекта и обрамляющие его этим ненавистным бойлерплейтом.
Хотелось бы как-то более красиво (ООП или UFCS для этих свободных функций, но его пока нет). Можно пронаследоваться от unique_ptr чтобы добавить к нему обернутые методы обернутого класса?

13 ответов

21 просмотр

А почему бы не использовать CComPtr?

LaG1924- Автор вопроса
Till Schneider
А почему бы не использовать CComPtr?

Потому что я не очень умный и не знал об этом. И изначальный автор кода с которым работаю - тоже не очень умен. И те, кто писал документацию на msdn. И те кто проектировал COM. Но в первую очередь - я. Спасибо, кажется, что это то, что нужно.

LaG1924- Автор вопроса
Stanislav Ershov
https://github.com/microsoft/wil/wiki/WinRT-and-CO...

Именно на этом пишут современный cpp-windows-код? Если да, то какой враппер выбрать (MFC/ATL/WIL/etc) чтобы оно работало минимум под 7-кой (для MFC вроде нужна поддержка со стороны ОС - про остальные не знаю) и органично вписывалось в современный плюсовый код?

LaG1924- Автор вопроса
LaG1924
Именно на этом пишут современный cpp-windows-код? ...

WIL хорош, но, наверное, все же нет. https://github.com/microsoft/wil/issues/97#issuecomment-540369663

LaG1924
Потому что я не очень умный и не знал об этом. И и...

Вы не путайте понятия умный и опытный. Мы все не дураки тут. Но у каждого свой опыт, у кого то больше в одной теме, у кого то в другой .

LaG1924- Автор вопроса
The Pressbraker
Вы не путайте понятия умный и опытный. Мы все не д...

Прошу прощения. Не хотел опять токсичить. Я хотел сказать, что есть некоторая проблема в том, что есть более совершенная технология, но даже сам факт её существования никак не афишируется (и пока напрямую не нагугил CComPtr не видел ни единого намека моей части Интернета на ATL или WIL), а большинство кода (как из реальных проектов, так и примеры с MSDN) используют легаси-подход из C++98 (а если идет речь про саму win32, то там вообще в С, но тут претензий уже меньше).

LaG1924
Прошу прощения. Не хотел опять токсичить. Я хотел ...

Я не в теме тут. Просто хотел узнать, что такое ATL? Про MFC я знаю это просто C++ обертка над winapi (которая изначально имеет С интерфейс )

Юник семантически не подходит для com

LaG1924- Автор вопроса
LaG1924
Именно на этом пишут современный cpp-windows-код? ...

Если у кого-то есть опыт использования WIL'a, то просьба им поделиться. Особенно поддержка старых ОС интересует (про актуальный компилятор и winsdk понятно).

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта