Jak najlepiej przekonwertować CString na BSTR, aby przekazać go jako parametr „in” do metody COM?

Muszę przekonwertowaćCString przykład do odpowiednio przydzielonegoBSTR i przekazać toBSTR w metodę COM. Aby kod był kompilowany i działał w sposób identyczny dla używanego ANSI i UnicodeCString::AllocSysString() konwertować dowolny formatCString do Unicode BSTR.

Ponieważ nikt nie jest właścicielem zwróconego BSTR-a, muszę się nim zająć i wypuścić go po wykonaniu połączenia w sposób możliwie najbardziej wyjątkowy i możliwie jak najmniejszy.

Obecnie używamATL::CComBSTR do zarządzania przez całe życie:

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

Nie podoba mi się to, że potrzebuję dwóch oddzielnych stwierdzeń, aby skonstruowaćATL::CComBSTR związany z wynikiem konwersji.

Czy jest lepszy sposób na wykonanie tego samego zadania?

questionAnswers(3)

yourAnswerToTheQuestion