Как наилучшим образом преобразовать CString в BSTR, чтобы передать его в качестве параметра «in» в метод COM?

Мне нужно конвертироватьCString экземпляр в правильно распределенномBSTR и передать этоBSTR в метод COM. Чтобы иметь код, который компилируется и работает одинаково для ANSI и Unicode, я используюCString::AllocSysString() конвертировать в любой форматCString на Unicode BSTR.

Поскольку никто не владеет возвращенным BSTR, я должен позаботиться об этом и освободить его после того, как вызов будет выполнен наиболее безопасным способом и с минимальным количеством кода.

В настоящее время я используюATL::CComBSTR для управления жизненным циклом:

 ATL::CComBSTR converted;
 converted.Attach( sourceString.AllocSysString() ); //simply attaches to BSTR, doesn't reallocate it
 interface->CallMethod( converted );

что я не делаюВот как здесь то, что мне нужно два отдельных заявления, чтобы просто построитьATL::CComBSTR привязан к результату преобразования.

Есть ли лучший способ выполнить ту же задачу?

Ответы на вопрос(3)

Ваш ответ на вопрос