Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Модуль VB в программе на VC++

8.2K
02 мая 2009 года
TheMaster
32 / / 23.12.2005
Есть программа на Visual C++. Её надо научить брать информацию из презентаций PowerPoint'a. Реализовано следующим образом: в презентации PowerPoint написан макрос, который сохраняет нужную информацию в файл на диске. Программа этот файл открывает, читает и так далее. Коряво и жутко неудобно для пользователя. Правильное решение - подключиться к PowerPoint'у как к COM-серверу и взять всё у него напрямую, без замысловатых манипуляций с "Alt-F8, окно "Макросы", центр обеспечения безопасности и т. п. "
Проблема в том, что работать с объектами COM в C++ я совершенно не умею. Справка загоняет в тоску размерами статей и ссылками на документацию PowerPoint'a, которая вся написана для Visual Basic'a. А вот его-то я знаю неплохо, посему - следующая идея: написать на Basic'e всё, что необходимо сделать с PowerPoint'ом, в виде отдельного модуля, перегнать информацию в совместимые форматы - то есть реализовать на Visual Basic'е процедуру, которую можно будет вызвать из текста на C++ и получить у неё всё необходимое.
Добавил Basic к Visual Studio 2008, открыл и ... растерялся: куча всяких Add-in'ов к Word'у, Excel'ю и прочая, а из знакомого мне - только предложение сваять dll на Net Framework 3.5. А что, просто модуль добавить, чтобы объектный файл скомпилить и его к проекту подключить - разве нельзя?
Хотя, возможно, и нельзя - но хочется знать точно.
9.0K
05 мая 2009 года
grag63
71 / / 23.01.2006
CoInitialize(NULL); - инициализация ком объектов.
CLSID clsid;
CLSIDFromString(L"PowerPoint.Application", &clsid); - получаем гуид.
IDispatch *pObjApp = NULL;
CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IDispatch, (LPVOID*)&pObjApp);
Далее используя метод Invoke (в IDispatch) работаем также как и в VB.
Для удобсва исп. GetIDsOfNames - получ. индеф. номера функции по ее имени.
Но лучше пойти другим путем: использовать интерфейс IStorage, а описание структур потоков можно найти у майкрософта.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог