Re[4]: Интересный момент?
От: Denwer Россия  
Дата: 20.12.05 12:30
Оценка:
Здравствуйте, yso, Вы писали:

yso>Здравствуйте, Аноним, Вы писали:



А>>>Если Вы посмотрите на то, как реализованы строки BSTR в C++, то увидите, что они представляют собой 4-х байтные указатели на строки 2-х байтных символов, завершающиеся 0x0000. В C++ НИКАКИХ счетчиков нет. Насколько я понимаю, они могут подсчитываться и передаваться при маршалинге. Поэтому ничего удивительного в тексте MFC нет.

А>>Не очень понятно о чем это вы.
А>>Отправлять WSTR туда, где ожидаеся BSTR — нельзя. Во-первых из-за возможного маршалинга именно как BSTR, во-вторых, клиент просто может вызвать что-нибудь BSTR-специфичное, вроде SysStringLen — и до свидания, ваша программа.

yso>Я приношу свои извинения и уточняю, что в реализацию BSTR в C++ входит и значение

yso>длины строки в байтах и расположен этот счетчик длины в 4-х байтном слове, предшествующем собственно строке, т.е. по адресу = (значение указателя — 4),
yso>откуда его и берет SysStringLen, деля его затем пополам. Так что возможность
yso>использования передаваемой WSTR в методе put_designMode действительно ограничена,
yso>хотя и не исключается вовсе. Как справедливо замечено кем-то ниже, это — "хак".

Ну тогда следует уточнить и то, что в данном констексте говорить о РЕАЛИЗАЦИИ BSTR в С++ не верно, т.к. в С++ это не реализация таких строк, а всего то врапперы над АПИ функциями, а уж что и как там хранится это дело операционной системы а не компилятора.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.