Здравствуйте Vi2, Вы писали:
Vi2>Чем отличается в IDL-файле такие описания (WIN32):
Vi2>Vi2>[...] HRESULT func( [in] LPWSTR buf )
Vi2>от
Vi2>[...] HRESULT func( [in] unsigned short* buf )
Vi2>или от
Vi2>[...] HRESULT func( [in] BSTR buf )
Vi2>
Vi2>И сколько информации будет передаваться ЛЮБЫМ маршаллером при таком описании?
Vi2>Первые два случая вообще эквиваленты — передаются 2 байта, причём любым маршаллером, а третий отличается, потому как MIDL не равнодушен именно к имени "BSTR", хотя оно тоже "unsigned short*".
Vi2>Поэтому выход, правильно предложенный Sergey:
Vi2>
Vi2>или использовать size_is (и т.п.) и свой маршаллер
Vi2>или использовать BSTR
Vi2>
А ты попробуй на досуге так не заморачиваться, а просто передать LPCTSTR. Уверен, у тебя получится. Ответ содержится в твоем вопросе: BSTR тоже раскрывается в LPWSTR, но маршалится особым образом. Почему? Видимо потому, что для MIDL compiler'а в отличие от cl.exe LPWSTR != unsigned short* != BSTR. Код для заглушек/прокси получается разный. Я так думаю...

Настоящему индейцу завсегда везде ништяк!