Здравствуйте.
Есть у меня задача написать большую dll с COM-классами на ATL для использования её в VB6 (иные варианты не рассматриваются, даже не предлагайте

).
Никогда этим ранее не занимался.
Начал с того, что создал в VS проект Windows DLL, добавил туда idl-файл и попробовал немного написать этот idl. На пробу, как первый шаг к дальнейшей работе. В первых строках данного файла примерно такое:
//VB-совместимость
typedef long DWORD;
typedef DWORD *LPDWORD;
typedef DWORD *PDWORD;
typedef short WORD;
typedef long UINT;
typedef long HWND;
typedef byte CHAR;
typedef byte UCHAR;
typedef wchar_t *PCWSTR;
typedef short WCHAR;
typedef long HDC;
typedef long HMONITOR;
typedef long HMODULE;
typedef long HANDLE;
typedef void* LPCVOID;
Далее идут всякие struct и interface (до фигища).
Разумеется, импорт виндовских типов MIDL делает сам из wtypes.idl, и мои переопределения идут после этого импорта.
Так вот, всё это прекрасно компилируется в tlb, и эта tlb прекрасно видится из VB6. Описал один coclass на пробу — создаётся, и методы вызываются.
Возрадовавшись, начал собственно основное — библу на ATL. Тут же оказалось, что все эти переопределения типов вызывают ошибку компиляции idl, а галка "MkTypLib Compatible", стоявшая в первом проекте, вообще не работает, ибо вызывает конфликт переопределения LIBID для самой library.
Долго сравнивал настройки проектов Windows dll и ATL (в основном, секцию MIDL). Чесал репу, но так ничего и не понял.
MSDN, опять же, но с тем же результатом.
Вот хочу спросить, как добиться от проекта ATL того же результата, как от WinDll. Чтобы работали мои переопределения.