Здравствуйте Vaso, Вы писали:
V>Позволю себе не согласиться с таким объяснением. MIDL compiler корректно транспортирует строки по указателям. В том числе в составе структур, нужно лишь построить и зарегистрировать dll заглушки — прокси. Я не пробовал проверять это при исползовании #import, хотя не думаю, чтобы там что-то помешало нормальному ходу процесса.
Чем отличается в IDL-файле такие описания (WIN32):
[...] HRESULT func( [in] LPWSTR buf )
от
[...] HRESULT func( [in] unsigned short* buf )
или от
[...] HRESULT func( [in] BSTR buf )
И сколько информации будет передаваться ЛЮБЫМ маршаллером при таком описании?
Первые два случая вообще эквиваленты — передаются 2 байта, причём любым маршаллером, а третий отличается, потому как MIDL не равнодушен именно к имени "BSTR", хотя оно тоже "unsigned short*".
Поэтому выход, правильно предложенный
Sergey:
или использовать size_is (и т.п.) и свой маршаллер
или использовать BSTR