Привет всем!

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

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

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

Только вот вопрос, МС специально такие грабли создаёт или как?
Автор: Вертер    Оценить