CString到_bstr_t转换C ++

时间:2013-12-23 04:10:58

标签: c++ com mfc

我从其他开发者那里继承了一个MFC项目。在多个MFC方法下,调用COM服务器,将字符串作为参数传递。以下是当前代码库中转换模式的代表性示例:

COM服务器:

void COMServer::foo(_bstr_t strParam)

MFC方法:

void Foo::foo(CString &csParam)
{
     CComBSTR bstrParam(strDocName);
     ptrToComServer->foo((BSTR)bstrParam);
}

在阅读了此article中的字符串转换规则后,我想知道当前的转换模式是否

  • 从内存管理的角度来看是安全的
  • 有效的字符串副本数量

关于上述两个问题,我还想知道以下转换是否会更好

void Foo::foo(CString &csParam)
{
    _bstr_t bstrParam(csParam);
    ptrToComServer->foo(bstrParam);
}

2 个答案:

答案 0 :(得分:2)

通过删除(BSTR)强制转换,应该改进传统的MFC方法。

void Foo::foo(CString &csParam)
{
     CComBSTR bstrParam(strDocName);
     ptrToComServer->foo(bstrParam);
}

我发现现有代码或新提案中没有内存损坏。 至于效率,这两种方法看起来与我完全相同。

如果你真的担心表演(你真的确定那些主人吗?你每秒做几千个COMServer :: foo电话)你应该从(关于你的“字符串”)开始:

  1. 让您的项目UNICODE(如果尚未完成),因为它可能会在您的COM呼叫之前为您带来更少的转换。
  2. 尽快使用CComBSTR_bstr_t,最终避免CStringBSTR次复制/转化。

答案 1 :(得分:0)

请使用以下转换

CString aTestUser(_T("TestUser"));
_bstr_t aConvertedUser(aTestUser);