2013-12-23 118 views
1

我從另一個開發人員繼承了一個MFC項目。在多個MFC方法下,調用COM服務器,將字符串作爲參數傳遞。這裏是在當前的代碼庫的變換圖案的代表性實例:CString to _bstr_t轉換C++

COM服務器:

void COMServer::foo(_bstr_t strParam) 

MFC方法:

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

在此article閱讀字符串的轉換規則之後,我想知道目前的轉換模式是否爲

  • 從內存中安全m anagement角度看
  • 高效的字符串拷貝數方面取得

對於上述兩個問題,我也想知道,如果下面的轉換將是更好

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

回答

1

應該通過刪除(BSTR)強制轉換來改進遺留的MFC方法。

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

我在您的現有代碼或新建議中看不到內存損壞。 至於效率,這兩種方法看起來與我完全相同。

如果你是不是真正的表演有關(你真的確定的事宜中你做幾千每秒COMServer :: foo調用了?)你應該(關於你的「弦」)開始:

  1. 讓你的項目UNICODE,如果還沒有完成,因爲它可能會在你的COM調用之前爲你買更少的轉換。
  2. 嘗試儘快使用CComBSTR_bstr_t,最終避免CStringBSTR拷貝/轉換。
0

請使用以下轉換:

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

這就是答案嗎? – manuell

+0

H ***是一個轉換的用戶? – Dave