我从其他开发者那里继承了一个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);
}
答案 0 :(得分:2)
通过删除(BSTR)强制转换,应该改进传统的MFC方法。
void Foo::foo(CString &csParam)
{
CComBSTR bstrParam(strDocName);
ptrToComServer->foo(bstrParam);
}
我发现现有代码或新提案中没有内存损坏。 至于效率,这两种方法看起来与我完全相同。
如果你真的担心表演(你真的确定那些主人吗?你每秒做几千个COMServer :: foo电话)你应该从(关于你的“字符串”)开始:
CComBSTR
或_bstr_t
,最终避免CString
到BSTR
次复制/转化。答案 1 :(得分:0)
请使用以下转换
CString aTestUser(_T("TestUser"));
_bstr_t aConvertedUser(aTestUser);