Привет всем!
может быть это уже было, но простым поиском не нашел.
Решил суммировать инфу о настройке 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.
Может быть есть и другие решения, но я пока не нашел.
После этого, кажется, всё работает как надо.
Только вот вопрос, МС специально такие грабли создаёт или как? |