Как стать автором
Обновить

Комментарии 3

Ну, именно такие вещи мне кажутся осмысленным применением С++/cli

Сопряжение управляемого и неуправляемого кода все еще довольно проблематично и вариантов тут два — либо COM по спецификациям Automation, либо C++/cli.

Положа руку на сердце, в данном случае я бы выбрал первый вариант — это позволило бы сократить код и сделать его проще.
ServiceControlManager::~ServiceControlManager()
{
if (!CloseServiceHandle(this->SCMHandle))
throw gcnew KernelErrorException();
}


В C++ cli это по сути дела является реализацией dispose. Dispose же по идее можно вызывать несколько раз и это не должно быть ошибочным действием.
К тому же этот код можно перенести в финализатор и в дейструкторе вызывать именно его, это будет соответствовать логике Dispose-паттерна для освобождения неуправляемых ресурсов.
Это очень существенное замечание. Спасибо. Внес исправления.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации