Почему я получаю сообщение «не могу преобразовать параметр 2 из« WORD [129] »в« LPOLESTR »после преобразования из VS2003 в VS2010? - PullRequest
0 голосов
/ 05 ноября 2011

Преобразование старого проекта vs2003 в vs2010, и я наткнулся на одну ошибку:

cannot convert parameter 2 from 'WORD [129]' to 'LPOLESTR'

Может ли кто-нибудь дать мне подсказку о том, что может быть причиной этой проблемы?

1 Ответ

4 голосов
/ 05 ноября 2011

Ну, вы не опубликовали никакого кода, поэтому я просто предположу, что у вас есть строка широких символов, определенная как

WORD wszMyAwesomeStringThatsGonnaBePassedToAnAPIatSomePoint[129] = "Booga!";

Видите, в VS2005 MS получает спрограмма и делает wchar_t встроенным типом.До этого это был просто typedef для ... unsigned short.Это было отлично для ваших целей, поскольку и WORD *, и LPOLESTR были и просто псевдонимами для unsigned short*.

Но теперь wchar_t является встроенным типом, и LPOLESTR определен - при условии, что вы не компилируете с определенным OLE2ANSI - как __RPC_string wchar_t* ... Таким образом, ваш код ломается.

Если вы уже гневно печатаете: «ЛОЖЬ !!! Я НЕ ИСПОЛЬЗУЮ WORD В ЛЮБОМ МЕСТЕ !!!», стоп - вы вполне можете использовать другой typedef или даже #define, которые в итоге приводят к тому, что ваша переменная определяется как массив WORD s.Возможно, вы используете какой-то огромный сложный фреймворк, который предварительно компилирует XML в структуры, содержащие массивы WORD;может быть, кто-то другой написал код для вас, и вы даже не посмотрели его.

Но так как вы не опубликовали код, показывающий нам, как вы объявляете строку, о которой идет речь, я не могу сказать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...