我需要转换一个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
绑定到转换结果。
有更好的方法来完成同样的任务吗?
CComBSTR
两者都有重载的构造函数char*
and wchar_t*
,这会调用SysAllocString()
代表你。因此,代码片段中的显式分配实际上是不必要的。以下内容也同样有效:
ATL::CComBSTR converted = sourceString;
interface->CallMethod(converted);
此外,如果您不需要使用转换后的BSTR
在代码的其他地方,您可以在方法调用中就地执行对象构造,如下所示:
interface->CallMethod(ATL::CComBSTR(sourceString));
这同样适用于_bstr_t
类,可以用来代替CComBSTR
如果您不想依赖 ATL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)