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.

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

Только вот вопрос, МС специально такие грабли создаёт или как?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.