Намеренные переопределения типов в IDL не проходят
От: GSerg  
Дата: 21.01.06 12:18
Оценка:
Здравствуйте.

Есть у меня задача написать большую 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. Чтобы работали мои переопределения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.