![]() |
|
|
![]()
|
|
| null56 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Всем привет
Проекты Qt собираются под студией Проблема: Есть либа (static lib), из которой черпаются классы с методами. Все линкуется кроме методов, аргументы которых имеют тип TCHAR или аналогичные макросы винды Линковщик выводит следующее
хотя прототип функции имеет вид
я так понял, что проблема как раз в этих макросах, Qt почему - то считает, что это не wchar_t Вопросы: - как решить эту проблему? - и реально ли вообще это сделать без пересборки либы? заранее благодарен за помощь ЗЫ: при компиляции в проекте присутствуют
|
||||||
|
|||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
скорее всего эта твоя либа (static lib) скомпилирована без поддержки UNICODE, а Qt - с ней.
Несмотря на то, что в прототипе указано
в самой lib-ине код - неюникодовский. решение видится такое: 1-й вариант: для h-ника с описанием прототипа отключить UNICODE 2-й вариант: скомпилировать lib-ину с поддержкой UNICODE 3-й вариант: уйти от этих типов TSTR и указывать явно char * или wchar_t * для 2-го и 3-го вариантов нужно перекомпилировать библиотеку. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
ща проверю
Добавлено @ 13:53 вы были правы... я бы долго сидел думал... спасибо вам Ответ: в либе отсутсвовали макросы UNICODE, видимо кто - то их забыл выставить или нарочно убрал ) Это сообщение отредактировал(а) null56 - 20.10.2010, 13:55 |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
поторопился я радоваться
http://ipicture.ru/uploads/101020/VsmT4LDr4E.png либа тоже юникодовая судя по всему ошибки не изчезли... Добавлено @ 15:21 перекомпилировать либу можно, только вопрос как, чтобы таких косяков не было Это сообщение отредактировал(а) null56 - 20.10.2010, 15:27 |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
и вообще в интерфейс lib-ины и dll-ки ( т.е. бинарника ) лучше не выносить нестандартные типы, потому, что эти типы у тебя и у пользователя этой либины могут отличаться в зависимости от настроек компилятора, версии SDK и т.п. Это же относится и к std::xxx -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
я только что заменил в классе типы аргументов на wchar_t, ошибка не прошла
|
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 2 Всего: 146 |
null56, попробуй поменять настройку в проекте: Project Properties -> Configuration Properties -> C/C++ -> Language -> Treat wchar_t as Built-in Type.
Это сообщение отредактировал(а) 586 - 20.10.2010, 16:17 |
|||
|
||||
| null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
вот как раз только что сделал это в режим Yes
получил
Добавлено через 11 минут и 23 секунды с этой опцией, я так понял, нельзя теперь пользоваться методом?
Это сообщение отредактировал(а) null56 - 20.10.2010, 16:22 |
||||
|
|||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 2 Всего: 146 |
Попробуй теперь отключить эту опцию, и в проекте, вместо wchar_t используй unsigned short. Если не будет компилироваться, то просто short.
Добавлено Хотя нет. то не поможет. Без этой опции, wchar_t равен unsigned short. Это сообщение отредактировал(а) 586 - 20.10.2010, 16:43 |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
завелось, но либы в таком виде оставлять не могу ( чего предолжите еще?
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
изменил типы параметров в методах либы
было
стало
|
||||
|
|||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 2 Всего: 146 |
||||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Ещё один момент. std::wstring ( возвращается toStdWString ), откомпилированный в библиотеках Qt, и std::wstring, откомпилированный в твоём проекте, совпадают только по интерфейсу. гарантии, что они будут полностью совпадать по реализации - нет. Т.о. см. след. код с комментариями:
P.S. Всё это не относится к тому случаю, если ты собирал библиотеки Qt у себя своим компилятором со своим SDK, а только, если установил библиотеки с сайта. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
||||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |