Здравствуйте Oldpasp, Вы писали:
O>Задача: в среде Word,Exel,Access (мне кажется это не принципиально, механизм должен быть одинаковым) открываем Документ(Форму, Лист). Пусть будет Форма (UserForm) с кнопочкой
O>По нажатию "кнопочки" изменяется размер формы и цвет фона.
O>Разумеется, сделать это (и многое другое) в среде VBA и VB поверьте, для меня не составляет практически никаких трудностей.
O>Вопрос — как свести это дело в DLL — (не VB-шную, а скажем "чистая, Windows-ая dll")
Т.е. нужна работа с объектами оффиса из C++ кода?
http://www.rsdn.ru/article/?vcpp/import.xmlАвтор(ы): Игорь Ткачёв
Дата: 9.03.2001
В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
и особенно примеры в конце .
Или проблема, как такой код вызвать из VBA? Делать интерфейсы дуальными.
O>Я ведь про то и спрашиваю, как перевести на C++/ATL
O>Конечно, это наверняка долго объяснять, поэтому, если есть пример работы с объектами VB(VBA) в C++/ATL- DLL — обращаю внимание, не создаваемыми в процедурах DLL, а УЖЕ СУЩЕСТВУЮЩИМИ, т.е. вызов методов происходит из среды VB(VBA) с передачей в качестве аргумента ссылку на объект — буду весьма признателен за ссылку или за посылку :)
У тебя есть DLL написанное на VB, значит есть и IDL. Его можно увидеть, посмотрев на DLL с помощью OleView. Вот это IDL и нужно воспроизвести в ATL-ном коде.
При передаче объекта из VBA в С++ код можно передавать через IDispatch*. Просто VBA все объекты держит нетипизированными и работает с ними через Invoke. В С++ коде ты уже можешь сделать QI на типизированный объект и дальше работать с типами, полученными через #import.
Я сейчас не могу сообразить — можно ли использовать вызовы с типизированными объектами в интерфейсах, сделает ли VBA при вызове QI. Возможно, да. Посмотри IDL от своей VB-шной DLL-и, там правильно.
O>Наверное не надо уже пояснять, что я только начал разбираться и поставил цель не разрабатывать собственные полнофункциональные приложения (на хлеб с маслом и так пока хватает), а создавать дополнения к уже существующим.(Лень мне тащить огромные куски кода из документа в документ)
Зачем тогда C++/ATL? Васик и флаг в руки. Серьезно.