Wie konvertiere ich CString am besten in BSTR, um es als "in" -Parameter an eine COM-Methode zu übergeben?
Ich muss eine konvertierenCString
Instanz in eine ordnungsgemäß zugewieseneBSTR
und weitergebenBSTR
in eine COM-Methode. Um Code zu haben, der sowohl für ANSI als auch für Unicode kompiliert und indentisch funktioniert, verwende ichCString::AllocSysString()
um jedes Format zu konvertierenCString
zu einem Unicode-BSTR.
Da niemand das zurückgegebene BSTR besitzt, muss ich mich darum kümmern und es freigeben, nachdem der Aufruf auf die ausnahmesicherste Weise und mit so wenig Code wie möglich ausgeführt wurde.
Zur Zeit benutze ichATL::CComBSTR
für das lebenslange Management:
ATL::CComBSTR converted;
converted.Attach( sourceString.AllocSysString() ); //simply attaches to BSTR, doesn't reallocate it
interface->CallMethod( converted );
Was ich hier nicht mag, ist, dass ich zwei separate Anweisungen brauche, um nur die zu konstruierenATL::CComBSTR
an das Konvertierungsergebnis gebunden.
Gibt es einen besseren Weg, um dieselbe Aufgabe zu erfüllen?