BSTR & CString
От: Mr.  
Дата: 07.09.07 07:27
Оценка:
Есть ActiveX на Atl. вопрос возник, как по ПРАВИЛЬНО получать в CString свойства из ActiveX.

CComBSTR sbsOut;
CString tmpStr;
pcx->get_myprop(&sbsOut); ИЛИ pcx->get_myprop(&sbsOut.m_str);
tmpStr=W2T(sbsOut); ИЛИ tmpStr.Format("%S",sbsOut.m_str);

и надо ли затем что-то делать с sbsOut, освобождать память там?
Re: BSTR & CString
От: denezuela Россия  
Дата: 07.09.07 09:07
Оценка:
Здравствуйте, Mr., Вы писали:

Mr.>Есть ActiveX на Atl. вопрос возник, как по ПРАВИЛЬНО получать в CString свойства из ActiveX.


Mr.>
Mr.>CComBSTR sbsOut;
Mr.>CString tmpStr;
pcx->>get_myprop(&sbsOut); ИЛИ pcx->get_myprop(&sbsOut.m_str);
Mr.>tmpStr=W2T(sbsOut); ИЛИ tmpStr.Format("%S",sbsOut.m_str);    
Mr.>

Mr.>и надо ли затем что-то делать с sbsOut, освобождать память там?

Скорее всего должно быть что-то вроде
BSTR bstrOut = NULL;
CString tmpStr;
pcx->get_myprop(&bstrOut );
tmpStr = bstrOut ; //У CString есть соответствующий оператор присваивания
::SysFreeString(bstrOut);

Прошу прощения, но нет компилятора под рукой, поэтому синтаксис не проверял
Re: BSTR & CString
От: Left2 Украина  
Дата: 07.09.07 13:16
Оценка: +1 :)
CComBSTR sbsOut;
CString tmpStr;

pcx->get_myprop(&sbsOut); // Всё OK

pcx->get_myprop(&sbsOut.m_str); // в данном случае будет работать, но это во-1 - 
                                // чуть больше текста, во-2 - если в CComBSTR уже что-то 
                                // было то ты получишь утечку без всяких ASSERT-ов. 
                                // Посмотри на CComBSTR::operator& чтобы стало понятнее
tmpStr=W2T(sbsOut);             // всё OK
tmpStr.Format("%S",sbsOut.m_str);    // тоже всё OK, но это просто лишняя работа.

// Память деструкторы CComBSTR и CString освободят сами.


А вообще — use the source, Luke! — чтение сорцов CComBSTR и CString доставят тебе много увлекательных минут и дадут твёрдое понимание что и где происходит — строки в программах используются повсеместно, так что глубокие знания в этой области окупятся сторицей
... << RSDN@Home 1.2.0 alpha rev. 717>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.