Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как правильно подключить unicows, в студии 7.1 
V
    Опции темы
_hunter
  Дата 15.6.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



Добрый день.

Подскажите, пожалуйста, как правильно подключить unicows (MFC линкуется статически).
Если в Project->Properties...->Linker->Command line->Additional Options
прописать
Код

/nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib /nod:msvcrtd.lib /nod:mfcs71ud.lib /nod:mfc71ud.lib
mfc71u.lib mfcs71u.lib comsupp.lib atls.lib unicows.lib shlwapi.lib uuid.lib ole32.LIB oleaut32.lib comctl32.LIB kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib version.lib mpr.lib rasapi32.lib winmm.lib winspool.lib vfw32.lib oleacc.lib oledlg.lib libcpmtd.lib libcmtd.lib secur32.lib oleacc.lib oledlg.lib sensapi.lib msvcrtd.lib

 -- получаю кучу error LNK2005: ХХХ already defined in ХХХ.lib

если же туда вписать просто
Код

unicows.lib version.lib

 -- как-то странно работает MFC -- AfxRegisterClass бросает assertion потому как ::RegisterClass не может зарегестрировать класс (имя ей приходит как wchar_t*). 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Coocky
Дата 15.6.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



ХМ...
Во первых я не пойму. а почему б МФС -ный Юникод не использовать?
Во вторых вот из МСДН
Цитата

Add the following two files to your project: 

UnicoWS.dll -- the Microsoft Layer for Unicode DLL 
UnicoWS.lib -- the LIB file to which you link 
Note that the Microsoft Layer for Unicode does not automatically load from the $(WINDOWS) or $(WINSYS) directories. 
Thus, do not put UnicoWS.dll there unless you are running from a system process that is located there. 
Instead, keep the UnicoWS.dll in your application directory and call LoadLibrary yourself to ensure that you load the correct .dll.

Add the following to the link options for your application (note that these libraries are not separated by commas because that is how you add them to the link list): 

First, add the following: /nod:kernel32.lib /nod:advapi32.lib /nod:user32.lib /nod:gdi32.lib /nod:shell32.lib /nod:comdlg32.lib /nod:version.lib /
nod:mpr.lib /nod:rasapi32.lib /nod:winmm.lib /nod:winspool.lib /nod:vfw32.lib /nod:secur32.lib /nod:oleacc.lib /nod:oledlg.lib /nod:sensapi.lib. 
Then add UnicoWS.lib. 
Finally, add the libraries that the Microsoft Layer for Unicode uses explicitly: kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib version.lib mpr.lib 
rasapi32.lib winmm.lib winspool.lib vfw32.lib secur32.lib oleacc.lib oledlg.lib sensapi.lib. In this step, omit any libraries listed after kernel32.lib whose APIs are not used in your application.

  However, if your application uses another component, such as MFC, ATL, or CRT, be sure to include any libraries on which the component depends. 
Compile your application. If you are using side-by-side assemblies, you must define MICROSOFT_LAYER_FOR_UNICODE as 1. 

Вроде ты делаешь правильно.
Вот то что выделено жирным-как по мне , так сильно расплывчато.. и не понятно, конкретно..
Так может МФС юникоде тебе? Там всего одно нажатие в свойствах проекта... smile   

Это сообщение отредактировал(а) Coocky - 15.6.2006, 16:38


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
_hunter
Дата 15.6.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



забыл написать -- все это шаманство из за того, что приложение на 98-х окнах работать должно.
а так -- что в свойствах проекта юникод стоит что макросы UNICODE/_UNICODE jghtltktys/ 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Coocky
Дата 15.6.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(_hunter @  15.6.2006,  15:50 Найти цитируемый пост)
получаю кучу error LNK2005: ХХХ already defined in ХХХ.lib


Цитата(Coocky @  15.6.2006,  16:36 Найти цитируемый пост)
However, if your application uses another component, such as MFC, ATL, or CRT, be sure to include any libraries on which the component depends.

Да вот в этом то и дело. Если используешь МФС, то надо подключить " другие библиотеки " для гарантированой работы. Меня раздражают такие пояснения.. smile 
А какие функции не видит?
 

Это сообщение отредактировал(а) Coocky - 15.6.2006, 17:47


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
_hunter
Дата 15.6.2006, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



так я и подключил:
mfc71u.lib mfcs71u.lib -- идут первыми
ошибки:
GCITrader error LNK2005: _free already defined in libcmtd.lib(dbgheap.obj)
GCITrader error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)
GCITrader error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)
GCITrader error LNK2005: "public: virtual int __thiscall CDialog::PreTranslateMessage(struct tagMSG *)" (?PreTranslateMessage@CDialog@@UAEHPAUtagMSG@@@Z) already defined in mfc71u.lib(MFC71U.DLL)
GCITrader error LNK2005: "public: virtual int __thiscall CDialog::OnCmdMsg(unsigned int,int,void *,struct AFX_CMDHANDLERINFO *)" (?OnCmdMsg@CDialog@@UAEHIHPAXPAUAFX_CMDHANDLERINFO@@@Z) already defined in mfc71u.lib(MFC71U.DLL)
GCITrader error LNK2005: "public: virtual __thiscall CDialog::~CDialog(void)" (??1CDialog@@UAE@XZ) already defined in mfc71u.lib(MFC71U.DLL)
и таких еще куча... 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Coocky
Дата 15.6.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Static Link Libraries

Release                                Debug                                            Description
UAFXCW.lib,pdb                  UAFXCWD.lib,pdb                Unicode MFC static link library

Добавлено @ 17:28 
Цитата(_hunter @  15.6.2006,  17:22 Найти цитируемый пост)
???
и что мне с этим делать?

Я тебе просто добавил перечень библиотек МФС smile  Пытаюсь хоть как-то smile 
Цитата



MFC supports the Unicode standard for encoding wide characters on Windows NT, Windows 2000, and Windows XP platforms.
   Unicode applications cannot run on Windows 98 platforms.

Note   The Unicode versions of the MFC libraries are not copied to your hard drive unless you select them during a Custom installation. They are not copied during other types of installation. If you attempt to build or run an MFC Unicode application without the MFC Unicode files, you may get errors.
To copy the files to your hard drive, rerun Setup and click Add/Remove Features. Expand the feature tree Language Tools, then Visual C++, then Visual C++ Class & Template Libraries, and select both ATL MFC Shared Libraries Unicode and ATL MFC Static Libraries Unicode.

И еще вопрос- не компилится во всех типах сборки или только в одной?  

Это сообщение отредактировал(а) Coocky - 15.6.2006, 17:29


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
_hunter
Дата 15.6.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



частично помогло -- число ошибок уменьшилось до семи:
две на libcmtd.lib
GCITrader error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in libcmtd.lib(typinfo.obj)
и остальные atls.lib
GCITrader error LNK2005: "char const * const g_pszKernelObjFmt" (?g_pszKernelObjFmt@@3PBDB) already defined in atls.lib(Externs.obj)
 


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Coocky
Дата 15.6.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(_hunter @  15.6.2006,  17:29 Найти цитируемый пост)
частично помогло

Ну это еще ничего не значит smile 
Мой последний ход-и я пас smile 
Попробуй добавить в Linker->Command Line->Additional Options  /FORCE:MULTIPLE  
Если нет-/FORCE:UNRESOLVED
Если нет- все, я сдаюсь smile 
Может Earnest одойдет позже и поможет.... smile  smile

Добавлено @ 17:40 
Цитата(_hunter @  15.6.2006,  17:29 Найти цитируемый пост)
две на libcmtd.lib

Цитата

When you build a release version of your project, one of the basic C run-time libraries (LIBC.LIB, LIBCMT.LIB, and MSVCRT.LIB) is linked by default, depending on the compiler option you choose (single-threaded, multithreaded, or DLL). If you include a Standard C++ Library header in your code, a Standard C++ Library will be linked in automatically by Visual C++ at compile time. For example: 

#include <ios> 


 


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Coocky
Дата 15.6.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Все, у него все собралось smile 
В аське договорились smile  


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Earnest
Дата 15.6.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



smile 
Не могли бы мне еще раз объяснить, почему нельзя в свойствах проекта поставить использование UNICODE? Тогда все должно подключиться правильно и само.
Если этого нельзя делать, т.к. приложение должно функционировать на 98, 
отсюда следует, что подключаемые при этом библиотеки по 98 недоступны (я не знаю, так ли это).
В таком случае возникает подозрение, что приложение для 98 вообще не может быть UNICODE. Однако можно использовать UNICODE версии многих функций - явно их называя. 

По-моему, так. 
Т.е. быстренько сделать пробный проект, легально включив UNICODE и проверить, как насчет 98. Если нет - то только отдельные UNICODE-функции.

Добавлено @ 18:03 
Ну и славно ... smile  


--------------------
...
PM   Вверх
_hunter
Дата 15.6.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98



в свойствах проекта UNICODE стоит.
но оно не запускалось на 98-й (потому как юникода там нет)
специяльно для решения этой проблемы MS выпустили unicode layer


теперь другая проблема появилась -- приложение запускается и даже немного работает, но как-то странно -- GetDlgItem() на диалоге возвращает NULL

хотя возможно проблема и не в run-time' е -- id контрола почему-то == -1
  

Это сообщение отредактировал(а) _hunter - 15.6.2006, 18:33


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Earnest
Дата 15.6.2006, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Никогда не имела дела с unicode layer... 

Обычно так анонимные статики называются по умолчанию. Но не факт, что позвав элемент с ид=-1 ты его получишь: там все хитро, нужно звать 65535.
Нужно проверить ид-ры элементов в ресурсах. И не использовать IDC_STATIC для тех контролов, к которым собираешься обращаться.
А вообще, нельзя решать слишком много проблем за один день  smile 
Некачественно получится.  


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0917 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.