Re[2]: Намеренные переопределения типов в IDL не проходят
От: GSerg  
Дата: 23.01.06 02:29
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Подход не верен в принципе

Тогда не получилось бы создать VB-compatible tlb в проекте Windll.

А>VB6 нужны IDispatch интерфейсы

В корне неверное представление закоренелого сишника
VB отлично работает с IUnknown без дополнительных телодвижений, а с одним дополнительным телодвижением работает ещё и с не-IUnknown.

А>и ваши структуры и т.п. работать не будут.

Увы, они уже работают. Из проекта WinDLL

А>Кроме того, не будет работать typelibrary маршаллинг.

Увы, работает и он

А>Пакуйте структуры в интерфейсы и используйте только Automation types.

Так вот только для введения Automation types всё и затевается.
Если VB увидит в tlb тип unsigned long, он скажет: <unsupported automation type>. Поэтому, когда мы из VB ведём диалог с сишными прогами, ожидающими ULONG, мы передаём наш обычный LONG, просто помним, что на самом деле он U.

И под структурами я подразумевал пользовательские типы. Контсрукцию struct из tlb VB трактует как свой Type (и правильно делает). У меня нет намерения использовать struct в качестве замены интерфейсу. Интерфейсы — они отдельно.


Понимаете, я могу во всей tlb руками разменить все ULONG на long и т.д. Но я не хочу этого делать, т.к. знаю, что можно через typedef. Я понимаю, что с точки зрения сишников подход может казаться странным, но тем не менее всё годами работает именно так.

Поэтому повторю первоначальный вопрос — как заставить typedef работать в проекте ATL так же, как он работает в WinDLL?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.