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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage