我需要将一个CString实例转换成适当分配的BSTR,并将该BSTR传递给COM方法。为了编译并在ANSI和Unicode之间工作,我使用CString::AllocSysString()将任何格式的CString转换为Unicode BSTR。
由于没有人拥有返回的BSTR,我需要以最少的代码和最安全的方式在调用完成后释放它。
目前,我使用ATL::CComBSTR进行生命周期管理:
由于没有人拥有返回的BSTR,我需要以最少的代码和最安全的方式在调用完成后释放它。
目前,我使用ATL::CComBSTR进行生命周期管理:
ATL::CComBSTR converted;
converted.Attach( sourceString.AllocSysString() ); //simply attaches to BSTR, doesn't reallocate it
interface->CallMethod( converted );
我不喜欢这里的地方就是我需要两个单独语句来构建绑定到转换结果的ATL::CComBSTR
。
有更好的方法来完成同样的任务吗?
CComBSTR::m_str
将为空。因此,被调用的方法将检查 null 并返回E_INVALIDARG
,或者不会检查并且您已经为CString::AllocSysString()
拥有的相同catch
可以为您处理异常。在我看来,这比显式执行自己的检查更清晰。 - Phil Booth