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