Безопасно ли удалять вызов OleInitialize из статической библиотеки не COM? - PullRequest
1 голос
/ 08 февраля 2012

Сегодня мне пришлось определить макрос препроцессора WIN32_MEAN_AND_LEAN в собственном проекте C ++, потому что я решил использовать в нем boost::asio, и без этого макроса я получаю ошибки сборки.

Дело в том, чтоошибка, которую я получаю сейчас - OleInitialize: identifier not found.Согласно MSDN , эта функция используется для инициализации библиотеки COM.Мой проект сейчас не является библиотекой COM, но мои партнеры говорят, что это было раньше.

В этом случае было бы безопасно удалить вызов?В проекте используется сочетание функций последовательного порта Win32 и boost :: asio (постепенно я оставлю только boost :: asio).Меня беспокоит, что OleInitialize может понадобиться для некоторых вызовов Win32.

Это все, что с ним делается:

HRESULT hOle = OleInitialize( 0 );
if( !SUCCEEDED( hOle ) )
    throw "Could not initialize OLE";

1 Ответ

2 голосов
/ 08 февраля 2012

Худшее, что может случиться, - это то, что COM-методы могут перестать работать, если вы все еще вызываете их.OleInitialize() звонит CoInitialize() внутри страны.Это нужно только этим функциям.Базовые функции Win32 (CreateWindow, CreateFile и т. Д.) Не требуют этой инициализации.

Если вы не вызываете какие-либо COM-методы (какие-либо из CoXXX() функций) и не вызываете какие-либо методы Ole(OleXXX() функций), тогда вам будет хорошо, если вы удалите его.

Вы должны сделать быстрый поиск в базе кода для функций COM / OLE и убедиться, что вы действительно больше не используете эти технологии.,Затем вы можете сделать сборку там, где вы этого не делаете, и протестировать ее, чтобы убедиться, что она все еще работает (у вас есть набор тестовых случаев, верно?).

Посмотрите на Документы на предмет других вещей, которые могут сломаться, которые вы должны проверить.

...