2012-06-19 123 views
0

我試圖將_bstr_t對象轉換爲char數組。更具體地說,我有一個預分配的char數組,我知道這個數組的大小,我想在那裏複製_bstr_t。將_bstr_t轉換爲char數組

有一段時間我的代碼是這樣的:

bool ReadCharPtr(_bstr_t const& input, char* output, unsigned int max_len) 
    { 
    // THIS CODE IS WRONG ! 
    const char * temp (input); 
    return ::strcpy_s(output, max_len, temp) == 0; 
    } 

但是...我不知道,這不是Windows文檔清晰,什麼時候我打電話operator char*() const發生。有些東西是在堆中分配的,我必須稍後才能釋放它?

有沒有辦法避免這一步,並實際將字符_bstr_t轉換爲預分配數組?這將避免在堆上分配字符,因爲沒有任何內容...

+0

http://stackoverflow.com/questions/626049/bstr-t-to-utf-8-possible – LihO

回答

1

不,這不是必需的。該文檔說「操作符返回指向實際內部緩衝區的指針,因此生成的字符串不能被修改。」這意味着_bstr_t負責刪除操作。

此外,您可以檢查_bstr_t的實現:

2010年MSVC:

_bstr_t使用_com_util :: ConvertBSTRToString()來從BSTR字符指針。 _com_util :: ConvertBSTRToString()文檔說這需要被調用者刪除。然而,_bstr_t緩存這個指針並在析構函數中刪除。