Здравствуйте 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 строка стала передаваться корректно.