CComBSTR vs _bstr_t
От: ligett Россия  
Дата: 18.10.01 12:45
Оценка:
Какая разница между классами ? Я имею ввиду зачем существует один, если есть другой ? CComPtr и IxxxPtr ? Последний при использовании в клиенте давал interface leak в BoundsChecker. Изменил на CComPtr и лик пропал. Посему и назрел вопрос.
Re: CComBSTR vs _bstr_t
От: IT Россия linq2db.com
Дата: 18.10.01 13:09
Оценка:
Здравствуйте ligett, Вы писали:

L>Какая разница между классами ? Я имею ввиду зачем существует один, если есть другой ? CComPtr и IxxxPtr ? Последний при использовании в клиенте давал interface leak в BoundsChecker. Изменил на CComPtr и лик пропал. Посему и назрел вопрос.


CComBSTR — часть библиотеки ATL, _bstr_t — часть RTL для поддежки директивы #import. В этом вся разница.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: CComBSTR vs _bstr_t
От: retalik www.airbandits.com/
Дата: 19.10.01 03:37
Оценка:
Здравствуйте IT, Вы писали:

IT>Здравствуйте ligett, Вы писали:


L>>Какая разница между классами ? Я имею ввиду зачем существует один, если есть другой ? CComPtr и IxxxPtr ? Последний при использовании в клиенте давал interface leak в BoundsChecker. Изменил на CComPtr и лик пропал. Посему и назрел вопрос.


IT>CComBSTR — часть библиотеки ATL, _bstr_t — часть RTL для поддежки директивы #import. В этом вся разница.


Я думаю, стоит еще отметить, что _bstr_t обладает гораздо большей функциональностью (преобразование в LPCSTR, операторы +, <, += и т.д.). Но "ланчей даром не бывает" — этот класс тянет за собой Runtime Library. Поэтому для разработки компактных ATL-компонентов стоит использовать неприхотливый CComBSTR, а в клиентском коде комфортнее использовать _bstr_t.
Успехов,
Виталий.
Re[2]: CComBSTR vs _bstr_t
От: Lexey Россия  
Дата: 19.10.01 11:13
Оценка:
Здравствуйте IT, Вы писали:

IT>Здравствуйте ligett, Вы писали:


L>>Какая разница между классами ? Я имею ввиду зачем существует один, если есть другой ? CComPtr и IxxxPtr ? Последний при использовании в клиенте давал interface leak в BoundsChecker. Изменил на CComPtr и лик пропал. Посему и назрел вопрос.


IT>CComBSTR — часть библиотеки ATL, _bstr_t — часть RTL для поддежки директивы #import. В этом вся разница.


Гы, Игорь, ты что еще не проснулся? :)
Человек про CComPtr спрашивал, а не про CComBSTR. Хотя, разница между CComPtr и IxxxPtr та же самая. :)
Re[3]: CComBSTR vs _bstr_t
От: IT Россия linq2db.com
Дата: 19.10.01 12:26
Оценка:
Здравствуйте Lexey, Вы писали:

L>Гы, Игорь, ты что еще не проснулся? :)

L>Человек про CComPtr спрашивал, а не про CComBSTR. Хотя, разница между CComPtr и IxxxPtr та же самая. :)

Дык я эта... иногда и сабжы читаю ;)
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: CComBSTR vs _bstr_t
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.01 19:20
Оценка:
Здравствуйте retalik, Вы писали:

R>Здравствуйте IT, Вы писали:


IT>>Здравствуйте ligett, Вы писали:


L>>>Какая разница между классами ? Я имею ввиду зачем существует один, если есть другой ? CComPtr и IxxxPtr ? Последний при использовании в клиенте давал interface leak в BoundsChecker. Изменил на CComPtr и лик пропал. Посему и назрел вопрос.


IT>>CComBSTR — часть библиотеки ATL, _bstr_t — часть RTL для поддежки директивы #import. В этом вся разница.


R>Я думаю, стоит еще отметить, что _bstr_t обладает гораздо большей функциональностью (преобразование в LPCSTR, операторы +, <, += и т.д.). Но "ланчей даром не бывает" — этот класс тянет за собой Runtime Library. Поэтому для разработки компактных ATL-компонентов стоит использовать неприхотливый CComBSTR, а в клиентском коде комфортнее использовать _bstr_t.


Ага а еще надо отметить, что _bstr_t обладает неописуемой кривизной и жадностью к рисурсам. И главное, что с ним никогда не сделать COM-обект размером <= 5 килобайтам. ;o)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: CComBSTR vs _bstr_t
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.10.01 19:23
Оценка:
Здравствуйте ligett, Вы писали:

L>Какая разница между классами ? Я имею ввиду зачем существует один, если есть другой ? CComPtr и IxxxPtr ? Последний при использовании в клиенте давал interface leak в BoundsChecker. Изменил на CComPtr и лик пропал. Посему и назрел вопрос.



Ну, лики в баундчекере — это точно твоя заслуга. У нас в проектах все интерфейсы через CComPtr держутся и ни каких проблем (общий объем кода ~ 150 000 строк рукописного кода).

Покажи как ты его используешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: CComBSTR vs _bstr_t
От: retalik www.airbandits.com/
Дата: 22.10.01 02:55
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Ну, лики в баундчекере — это точно твоя заслуга. У нас в проектах все интерфейсы через CComPtr держутся и ни каких проблем (общий объем кода ~ 150 000 строк рукописного кода).


Он же как раз говорит про IxxxPtr, то есть про _com_ptr на сгенеренном с помощью #import враппере.

PS:

VD>Ага а еще надо отметить, что _bstr_t обладает неописуемой кривизной и жадностью к рисурсам. И главное, что с ним никогда не сделать COM-обект размером <= 5 килобайтам. ;o)


Ты так народ напугаешь, что он #import не будет использовать :) Там ведь тоже _bstr_t используется. А в чем кривость-то?

PPS: сколько не пытался, меньше 7 кБ сделать компонент не получалось...
Успехов,
Виталий.
Re[3]: CComBSTR vs _bstr_t
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.01 18:49
Оценка:
Здравствуйте retalik, Вы писали:

R>Здравствуйте VladD2, Вы писали:


VD>>Ну, лики в баундчекере — это точно твоя заслуга. У нас в проектах все интерфейсы через CComPtr держутся и ни каких проблем (общий объем кода ~ 150 000 строк рукописного кода).


R>Он же как раз говорит про IxxxPtr, то есть про _com_ptr на сгенеренном с помощью #import враппере.


Да? Как обманчива быает природа... подумал ежик...

Ну, тогда дело может быть в обработчике (вернее тарнсляторе) COM-ошибок в C++-исключения. Там был документированный лик. По-моему, в SP5 (или 4) замазали.

R>PS:


VD>>Ага а еще надо отметить, что _bstr_t обладает неописуемой кривизной и жадностью к рисурсам. И главное, что с ним никогда не сделать COM-обект размером <= 5 килобайтам. ;o)


R>Ты так народ напугаешь, что он #import не будет использовать :) Там ведь тоже _bstr_t используется. А в чем кривость-то?


Да, ну... #import-том пльзоваться можно, но только если нет исходников и только так:
#import "xxx.ocx" no_namespace, named_guids, no_implementation,
raw_interfaces_only, raw_dispinterfaces, raw_native_types


R>PPS: сколько не пытался, меньше 7 кБ сделать компонент не получалось...


Наш рекорд 4.5 к. Но говорят, что можно и до сотен байт довести, тока от COM-а там уже мало чего будет. Но 7 к — это тоже не плохо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: CComBSTR vs _bstr_t
От: ligett Россия  
Дата: 30.10.01 14:20
Оценка:
VD>>>Ага а еще надо отметить, что _bstr_t обладает неописуемой кривизной и жадностью к рисурсам. И главное, что с ним никогда не сделать COM-обект размером <= 5 килобайтам. ;o)

R>>Ты так народ напугаешь, что он #import не будет использовать :) Там ведь тоже _bstr_t используется. А в чем кривость-то?


VD>Да, ну... #import-том пльзоваться можно, но только если нет исходников и только так:

VD>
#import "xxx.ocx" no_namespace, named_guids, no_implementation,
VD>raw_interfaces_only, raw_dispinterfaces, raw_native_types


R>>PPS: сколько не пытался, меньше 7 кБ сделать компонент не получалось...


VD>Наш рекорд 4.5 к. Но говорят, что можно и до сотен байт довести, тока от COM-а там уже мало чего будет. Но 7 к — это тоже не плохо.


Спасибо за ответ. Вроде разобрался. Только не понятно как определить, подцепила ли она Runtime Library или нет. И заодно сколько она добавляет объёма dll-ке?
Re[3]: CComBSTR vs _bstr_t
От: George_Seryakov Россия  
Дата: 30.10.01 14:30
Оценка:
Здравствуйте retalik, Вы писали:


IT>>CComBSTR — часть библиотеки ATL, _bstr_t — часть RTL для поддежки директивы #import. В этом вся разница.


R>Я думаю, стоит еще отметить, что _bstr_t обладает гораздо большей функциональностью (преобразование в LPCSTR, операторы +, <, += и т.д.). Но "ланчей даром не бывает" — этот класс тянет за собой Runtime Library. Поэтому для разработки компактных ATL-компонентов стоит использовать неприхотливый CComBSTR, а в клиентском коде комфортнее использовать _bstr_t.


Еще: у CComBSTR подлежащий BSTR может быть впрямую изменен, в отличие от _bstr_t.
GS
Re[5]: CComBSTR vs _bstr_t
От: retalik www.airbandits.com/
Дата: 30.10.01 14:36
Оценка:
Здравствуйте ligett, Вы писали:

L>Спасибо за ответ. Вроде разобрался. Только не понятно как определить, подцепила ли она Runtime Library или нет. И заодно сколько она добавляет объёма dll-ке?


Просто: если линкуется в Release с макросом _ATL_MIN_CRT, значит не подцепила :)
А размер — что-то около 25 кил, если не ошибаюсь.
Успехов,
Виталий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.