Здравствуйте, 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 в С++ не верно, т.к. в С++ это не реализация таких строк, а всего то врапперы над АПИ функциями, а уж что и как там хранится это дело операционной системы а не компилятора.