Visual Express C++ 2005 Express Edition and WTL 7.5
От: Вертер  
Дата: 09.12.05 20:57
Оценка: 28 (5)
#Имя: FAQ.wtl.vsexpress
Привет всем!

может быть это уже было, но простым поиском не нашел.

Решил суммировать инфу о настройке 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.

Может быть есть и другие решения, но я пока не нашел.
После этого, кажется, всё работает как надо.

Только вот вопрос, МС специально такие грабли создаёт или как?
Re: Visual Express C++ 2005 Express Edition and WTL 7.5
От: Владек Россия Github
Дата: 10.12.05 12:16
Оценка:
Здравствуйте, Вертер, Вы писали:

В>Привет всем!


В>может быть это уже было, но простым поиском не нашел.


В>Решил суммировать инфу о настройке Visual Express C++ 2005 Express Edition и WTL 7.5.


В>Для исользования WTL, неодходимо ещё установить Windows® Server 2003 SP1 Platform SDK


Подходит ли Windows XP SP2 Platform SDK? ATL я там нашёл только в папке include\Win64, указанные строчки содержат совсем другое.
Кинг Конг — наше всё!
Re[2]: Visual Express C++ 2005 Express Edition and WTL 7.5
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 10.12.05 12:44
Оценка: 2 (1)
Здравствуйте, Владек, Вы писали:

В>Подходит ли 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>>
Re[2]: Visual Express C++ 2005 Express Edition and WTL 7.5
От: Вертер  
Дата: 10.12.05 12:46
Оценка: 2 (1)
Здравствуйте, Владек, Вы писали:

В>Здравствуйте, Вертер, Вы писали:


В>>Привет всем!


В>>может быть это уже было, но простым поиском не нашел.


В>>Решил суммировать инфу о настройке 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.
Re: Visual Express C++ 2005 Express Edition and WTL 7.5
От: Вертер  
Дата: 23.12.05 18:35
Оценка: 8 (1)
Здравствуйте, Вертер, Вы писали:

В>Привет всем!


В>может быть это уже было, но простым поиском не нашел.


В>Решил суммировать инфу о настройке 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 вместе с исходниками, если кому они интересны.
Re: Visual Express C++ 2005 Express Edition and WTL 7.5
От: kwas Россия  
Дата: 17.01.06 20:03
Оценка:
Здравствуйте, Вертер, Вы писали:

В>[q]

В>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++)

В>---------------------------------------------------------------

Только что заметил: в VC++ 2005 Express в Project -> Properties -> C/C++ -> Language eсть настройка "Force Conformance In For Loop Scope", по умолчанию установленная в Yes. Она тут не поможет?
If a shark stops swimming, it will die. Don't stop swimming, Mr. Mulder.
Every epic equalizer is iso (c)
Re: Visual Express C++ 2005 Express Edition and WTL 7.5
От: Аноним  
Дата: 18.01.06 21:26
Оценка:
Не компилируются все виды проектов WTL.
Linker не находит atl.lib. Она находится только в Lib\IA64 и Lib\AMD64\atlmfc.
Re[2]: Visual Express C++ 2005 Express Edition and WTL 7.5
От: Вертер  
Дата: 18.01.06 22:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не компилируются все виды проектов 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
Re[3]: Visual Express C++ 2005 Express Edition and WTL 7.5
От: Аноним  
Дата: 19.01.06 09:55
Оценка:
Здравствуйте, Вертер, Вы писали:

В>Здравствуйте, Аноним, Вы писали:


А>>Не компилируются все виды проектов 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.
Re[4]: Visual Express C++ 2005 Express Edition and WTL 7.5
От: Вертер  
Дата: 19.01.06 21:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Вертер, Вы писали:


В>>Здравствуйте, Аноним, Вы писали:


А>>>Не компилируются все виды проектов 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

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.