Как наилучшим образом преобразовать 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
привязан к результату преобразования.
Есть ли лучший способ выполнить ту же задачу?