sha*_*oth 8 windows com atl bstr visual-c++
我需要将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 );
Run Code Online (Sandbox Code Playgroud)
我不喜欢的是我需要两个单独的语句来构造ATL::CComBSTR转换结果的绑定.
有没有更好的方法来完成相同的任务?
Phi*_*oth 15
CComBSTR已重载两个构造char*和wchar_t*,这使得调用SysAllocString()代表您.因此,您的代码段中的显式分配实际上是不必要的.以下也适用:
ATL::CComBSTR converted = sourceString;
interface->CallMethod(converted);
Run Code Online (Sandbox Code Playgroud)
此外,如果您有没有必要使用转换BSTR在代码中的其他地方,你可以在方法调用执行就地对象结构,就像这样:
interface->CallMethod(ATL::CComBSTR(sourceString));
Run Code Online (Sandbox Code Playgroud)
这同样适用于_bstr_t该类,CComBSTR如果您不希望依赖于ATL ,则可以使用该类.
| 归档时间: |
|
| 查看次数: |
13617 次 |
| 最近记录: |