Re[3]: использование LPTSTR в COM
От: Аноним  
Дата: 23.05.02 07:21
Оценка:
Здравствуйте Vaso, Вы писали:

V>Здравствуйте Sergey, Вы писали:


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


А>>>в idl файле определена стуктура в которую входит LPTSTR pszText;

А>>>при использовании #import клиент видит это поле как LPWSTR pszText;(tlh файл)
А>>>в клиенте написан вот такой код
А>>>WCHAR pWcharText[256] = _T("Text");
А>>>lvc.pszText = pWcharText

А>>>потом стуктура передается как параметр функции com сервера

А>>>внутри функции оказалось что lvc.pszText содержит только один первый символ
А>>>что не правильно при использовании LPTSTR ?

S>>Причуды маршаллинга :-\ LPWSTR — просто указатель, маршаллер достаточно умный, чтобы догадаться передать элемент, на который он указывает, но недостаточно умный, чтобы догадаться, сколько там на самом деле символов. Надо использовать BSTR.


V>Позволю себе не согласиться с таким объяснением. MIDL compiler корректно транспортирует строки по указателям. В том числе в составе структур, нужно лишь построить и зарегистрировать dll заглушки — прокси. Я не пробовал проверять это при исползовании #import, хотя не думаю, чтобы там что-то помешало нормальному ходу процесса.


решение проблемы оказалось простым и интересным:
клиент был скомпилирован с preprocessor definitions как UNICODE а сервер как _MBCS.после того как сервер скомпилил как UNICODE строка стала передаваться корректно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.