А>>Если Вы посмотрите на то, как реализованы строки BSTR в C++, то увидите, что они представляют собой 4-х байтные указатели на строки 2-х байтных символов, завершающиеся 0x0000. В C++ НИКАКИХ счетчиков нет. Насколько я понимаю, они могут подсчитываться и передаваться при маршалинге. Поэтому ничего удивительного в тексте MFC нет. А>Не очень понятно о чем это вы. А>Отправлять WSTR туда, где ожидаеся BSTR — нельзя. Во-первых из-за возможного маршалинга именно как BSTR, во-вторых, клиент просто может вызвать что-нибудь BSTR-специфичное, вроде SysStringLen — и до свидания, ваша программа.
Я приношу свои извинения и уточняю, что в реализацию BSTR в C++ входит и значение
длины строки в байтах и расположен этот счетчик длины в 4-х байтном слове, предшествующем собственно строке, т.е. по адресу = (значение указателя — 4),
откуда его и берет SysStringLen, деля его затем пополам. Так что возможность
использования передаваемой WSTR в методе put_designMode действительно ограничена,
хотя и не исключается вовсе. Как справедливо замечено кем-то ниже, это — "хак".