gpt4 book ai didi

windows - 如何最好地将 CString 转换为 BSTR 以将其作为 "in"参数传递给 COM 方法?

转载 作者:可可西里 更新时间:2023-11-01 12:44:49 25 4
gpt4 key购买 nike

我需要将 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 );

我在这里不喜欢的是我需要两个单独的语句来构造绑定(bind)到转换结果的 ATL::CComBSTR

是否有更好的方法来完成相同的任务?

最佳答案

CComBSTRchar*wchar_t* 重载了构造函数,它们调用了 SysAllocString() 代表你。因此,您的代码片段中的显式分配实际上是不必要的。以下内容同样有效:

ATL::CComBSTR converted = sourceString;
interface->CallMethod(converted);

此外,如果您不需要在代码的其他地方使用转换后的 BSTR,您可以在方法调用中就地执行对象构造,如下所示:

interface->CallMethod(ATL::CComBSTR(sourceString));

这同样适用于 _bstr_t 类,如果您不想依赖 ATL,可以使用它代替 CComBSTR

关于windows - 如何最好地将 CString 转换为 BSTR 以将其作为 "in"参数传递给 COM 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com