Привет всем!
может быть это уже было, но простым поиском не нашел.
Решил суммировать инфу о настройке Visual Express C++ 2005 Express Edition и
WTL 7.5.
Для исользования WTL, неодходимо ещё установить
Windows® Server 2003 SP1 Platform SDK
После этого надо изменить два файла в Platform SDK (информация взята из
этого сообщенияАвтор: c-smile
Дата: 11.11.05
)
1. Change SetChainEntry function at Line 1725 of atlwin.h,define "int i" at first
---------------------------------------------------------------
BOOL SetChainEntry(DWORD dwChainID, CMessageMap* pObject, DWORD
dwMsgMapID = 0)
{
int i;
// first search for an existing entry
for(i = 0; i < m_aChainEntry.GetSize(); i++)
---------------------------------------------------------------
2. Change AllocStdCallThunk and FreeStdCallThunk at Line 287 of atlbase.h,to new macro
---------------------------------------------------------------
/* Comment it
PVOID __stdcall __AllocStdCallThunk(VOID);
VOID __stdcall __FreeStdCallThunk(PVOID);
#define AllocStdCallThunk() __AllocStdCallThunk()
#define FreeStdCallThunk(p) __FreeStdCallThunk(p)
#pragma comment(lib, "atlthunk.lib")
*/
#define AllocStdCallThunk() HeapAlloc(GetProcessHeap(),0,sizeof(_stdcallthunk))
#define FreeStdCallThunk(p) HeapFree(GetProcessHeap(), 0, p)
---------------------------------------------------------------
При компиляции могут возникнуть такие
проблемы:
1. после конвертации WTL примеров в формат Visual Studio C++ 2005 возникает ошибка
CVTRES : fatal error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409
2. Debug версия приложения компилится нормально (без ошибок), а при компиляции release версии на этапе линковки получаются три ошибки
Linking...
LIBCMT.lib(calloc.obj) : error LNK2005: _calloc already defined in stdatl.obj
LIBCMT.lib(realloc.obj) : error LNK2005: _realloc already defined in stdatl.obj
LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
.\Release/MTPad.exe : fatal error LNK1120: 1 unresolved externals
Решения
Проблема 1: Визарт конвертирования проектов зачем-то в конец файла ресурса (rc) добавляет снова переменную CREATEPROCESS_MANIFEST_RESOURCE_ID, которая уже есть в этом файле. Надо просто удалить эту секцию. Пример:
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\WTLExplorer.exe.manifest"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
Проблема 2: В свойствах проекта (Property pages) надо значение параметра "Minimize CRT Use in ATL" поставить в No.
Может быть есть и другие решения, но я пока не нашел.
После этого, кажется, всё работает как надо.
Только вот вопрос, МС специально такие грабли создаёт или как?
Здравствуйте, Вертер, Вы писали:
В>Привет всем!
В>может быть это уже было, но простым поиском не нашел.
В>Решил суммировать инфу о настройке Visual Express C++ 2005 Express Edition и WTL 7.5.
В>Для исользования WTL, неодходимо ещё установить Windows® Server 2003 SP1 Platform SDK
Подходит ли Windows XP SP2 Platform SDK? ATL я там нашёл только в папке include\Win64, указанные строчки содержат совсем другое.
Кинг Конг — наше всё!
Здравствуйте, Владек, Вы писали:
В>Подходит ли Windows XP SP2 Platform SDK? ATL я там нашёл только в папке include\Win64, указанные строчки содержат совсем другое.
видимо нет, т.к. в Windows® Server 2003 SP1 Platform SDK она лежит в C:\Program Files\Microsoft Platform SDK\Include\atl\
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Владек, Вы писали:
В>Здравствуйте, Вертер, Вы писали:
В>>Привет всем!
В>>может быть это уже было, но простым поиском не нашел.
В>>Решил суммировать инфу о настройке Visual Express C++ 2005 Express Edition и WTL 7.5.
В>>Для исользования WTL, неодходимо ещё установить Windows® Server 2003 SP1 Platform SDK
В>Подходит ли Windows XP SP2 Platform SDK? ATL я там нашёл только в папке include\Win64, указанные строчки содержат совсем другое.
думаю, что нет. Вообще Platform SDK 2003 содержит в себе XP SP2 PSDK.
Здравствуйте, Вертер, Вы писали:
В>Привет всем!
В>может быть это уже было, но простым поиском не нашел.
В>Решил суммировать инфу о настройке Visual Express C++ 2005 Express Edition и WTL 7.5.
Кстати, в Visual Express C++ 2005 Express Edition отключен встроенный редактор ресурсов. Хорошо, что хоть
компилятор ресурсов оставили (в ToolKit 2003 его не было).
Конечно и в текстовом виде можно редактировать, но есть и другой редактор ресурсов, называется ResEd. Написан на ассемблере, найти можно тут:
http://radasm.visualassembler.com/projects/projects.html вместе с исходниками, если кому они интересны.
If a shark stops swimming, it will die. Don't stop swimming, Mr. Mulder.
Every epic equalizer is iso (c)
Не компилируются все виды проектов WTL.
Linker не находит atl.lib. Она находится только в Lib\IA64 и Lib\AMD64\atlmfc.
Здравствуйте, Аноним, Вы писали:
А>Не компилируются все виды проектов WTL.
А>Linker не находит atl.lib. Она находится только в Lib\IA64 и Lib\AMD64\atlmfc.
смотрите тут:
http://www.codeproject.com/wtl/WTLExpress.asp
у вас не та версия PSDK.. Должна
быть эта:
Windows® Server 2003 SP1 Platform SDK Web Install
Здравствуйте, Вертер, Вы писали:
В>Здравствуйте, Аноним, Вы писали:
А>>Не компилируются все виды проектов WTL.
А>>Linker не находит atl.lib. Она находится только в Lib\IA64 и Lib\AMD64\atlmfc.
В>смотрите тут: http://www.codeproject.com/wtl/WTLExpress.asp
В>у вас не та версия PSDK.. Должна быть эта: Windows® Server 2003 SP1 Platform SDK Web Install
У меня эта версия PSDK на двух машинах.
В C:\Program Files\Microsoft Platform SDK\Lib нет atl.lib.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Вертер, Вы писали:
В>>Здравствуйте, Аноним, Вы писали:
А>>>Не компилируются все виды проектов WTL.
А>>>Linker не находит atl.lib. Она находится только в Lib\IA64 и Lib\AMD64\atlmfc.
В>>смотрите тут: http://www.codeproject.com/wtl/WTLExpress.asp
В>>у вас не та версия PSDK.. Должна быть эта: Windows® Server 2003 SP1 Platform SDK Web Install
А>У меня эта версия PSDK на двух машинах.
А>В C:\Program Files\Microsoft Platform SDK\Lib нет atl.lib.
хм, у иеня в этих же каталогах, но WTL программы компилятся...
Может линкеру не надо давать эту либу?

у меня вот:
/OUT:"Debug\**********.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\**********.exe.intermediate.manifest" /DEBUG /PDB:"*:\**********\debug\**********.pdb" /SUBSYSTEM:WINDOWS /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib