Re[3]: VBA и автоматизация
От: George_Seryakov Россия  
Дата: 18.02.02 16:36
Оценка:
Здравствуйте 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? Васик и флаг в руки. Серьезно.
GS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.