![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
UfoLand |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Решил,тут, перевести проект на UNICODE, делал-делал, но столкнулся с проблемой,
использую стороннюю библиотеку(собрана на VC6++), при сборке проекта получаю ошибку вида
Метод:
Вызываю:
Пробовал поставить в свойствах проекта (/Zc:wchar_t-) - не помогло. Что делать?-) Это сообщение отредактировал(а) UfoLand - 7.2.2008, 19:48 |
||||||
|
|||||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
UfoLand, а у тебя-то компилятор какой?
|
|||
|
||||
marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
UfoLand, скорее всего несоответствие соглашения о вызове (thiscall, stdcall, cdecl) - в данном случае - нужно thiscall (в ошибке об этом сказано). А как Вы анонсируете метод у себя в программе, то есть что написано в хедере? Кроме того, имя функции декорировано. С помощью dumpbin и подобных утилит Вы можете узнать, действительно ли сторонняя библиотека эспортируют функцию, которую хотите использовать. И подключена ли она вообще, то есть работают ли какие-либо другие функции...
А тип параметра верен (если символ препроцессора _UNICODE определён). Это сообщение отредактировал(а) marcusmae - 7.2.2008, 21:53 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
||||
|
||||
UfoLand |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.9.2007 Репутация: нет Всего: нет |
Setting environment for using Microsoft Visual Studio 2005 x86 tools. C:\Program Files\Microsoft Visual Studio 8\vc\bin>cl Microsoft ® 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86 Copyright © Microsoft Corporation. All rights reserved.
НУ просто подключаю библиотеку и заголовочный файл(там этот метод и обявлен):
Я этой функцией свободно пользовался до того как перейти на юникод, у меня вообще проектр собирался ии всё было в порядк, до перехода на юникод.
Да работают другие функции, ошибки Linker'а вылезают только у функций где в качестве параметра должна передаваться как минимум одна строка LPCTSTR
Я когда решил перейти на юникод, выставил в свойствах проекта: Use Unicode Character Set пробовал и _UNICODE - руками прописать, не помогло...
как это реализовать, подскажите пож-ста... Такой вариант я то же пробовал, результат одни... Это сообщение отредактировал(а) UfoLand - 12.2.2008, 14:05 |
||||||||||||
|
|||||||||||||
marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
UfoLand, кажется, я понял, в чём тут дело. Смотрите, может в своём проекте Вы определили символ _UNICODE, но это никак не влияет на юникодовость подключаемой библиотеки. LPCTSTR - это условный алиас, он равен LPCWSTR (const wchar_t*) если _UNICODE или LPCASTR (const char*) иначе. То есть, если в САМОЙ библиотеке не определён юникод, то в ней функция имеет прототип
а Вы пытаетесь вызвать
которого там ессесно нет. Есть ли возможность пересобрать саму библиотеку с _UNICODE? Это сообщение отредактировал(а) marcusmae - 12.2.2008, 15:34 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Гы, сторонняя библиотека ТОЖЕ должна быть откомпилированна в Unicode! |
|||
|
||||
Adil' |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 26.8.2004 Где: Питер Репутация: 6 Всего: 15 |
Если библ-ку нельзя пересобрать с поддержкой unicode, можно попробовать "обрамить" подключаемые заголовочные файлы, типа:
-------------------- Удачи |
|||
|
||||
marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Adil', а толку? = Заголовочные файлы могут быть какими угодно. Но содержимое dll от этого не изменится : если dll с _UNICODE, а header - без или dll без _UNICODE, а хедер - с ним, то нужные функции найдены не будут. Так что либо два комплекта хедер + dll для каждой из версий, либо два хедера и один dll, в котором реализуются оба варианта, либо то, что, имхо, лучше всего : не разводить лишних хедеров и иметь в dll обе реализации
и ОДИН хедер, в котором переключение между двумя вариантами спрятано в LPCTSTR :
Это сообщение отредактировал(а) marcusmae - 13.2.2008, 19:58 -------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
586 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
Если метод реализован в DLL, я не вижу, что он экспортируется.
Это сообщение отредактировал(а) 586 - 13.2.2008, 21:31 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |