Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 OLE из С++  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Многие годы я готовил выходные документы через EXCEL и WORD. Данные - из БД.
Что-то случилось с моим офисом и теперь я получаю:

К сообщению приложен файл. Размер - 14Kb
21 апр 20, 13:38    [22119839]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Переустановка офиса не помогает.
Может, у кого-нибудь есть соображения на этот счет?
Очень не хочется переустанавливать операционку.
21 апр 20, 13:40    [22119843]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
А где исходный код?
21 апр 20, 16:00    [22119980]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5914
muk07,

регистрация объектов автоматизации офиса не прошла

скопировать с реестра рабочей машинки, где такой же офис стоит и добавить в свой
22 апр 20, 11:54    [22120640]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8539
kealon(Ruslan)

регистрация объектов автоматизации офиса не прошла
скопировать с реестра рабочей машинки, где такой же офис стоит и добавить в свой

Только программист* мог дать такой точный и бесполезный ответ ( C )

* в других версиях анекдота - математик
22 апр 20, 14:20    [22120754]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
Не уверен что копирование реестра здесь будет решением. Если какие-то компоненты
не прорегистрировались во время инсталляции офиса - значит на то были причины и надо их
смотреть. Иначе реестр будет фейком по отношению к реальному положению дел.
22 апр 20, 14:24    [22120758]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8539
кроме того, остается 50% вероятности, что дело не в офисе, а в прикладной программе
+

почему 50% ? все просто:

-Какая вероятность встретить динозавра на улице
-1/2 Или встретишь или нет
22 апр 20, 14:28    [22120763]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
NekZ
Member

Откуда: Stuttgart, Baden-Württemberg.
Сообщений: 3571
Разве regsvr не для этого предназначен?
Сорри если тупой вопрос, COM трогал лет 13 назад последний раз...
22 апр 20, 18:46    [22120959]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
Разумеется. А что любой бинарник можно подложить под regsvr32 ?
22 апр 20, 18:49    [22120961]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5914
NekZ
Разве regsvr не для этого предназначен?
Сорри если тупой вопрос, COM трогал лет 13 назад последний раз...
врят ли получится, у многих релоки срезаны в экзешнике
обычно COM-сервера в виде exe регистрируются если запустить их с параметром -register под админом

но копии с реестра аналогичной конфигурации достаточно
22 апр 20, 20:26    [22121014]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8539
kealon(Ruslan)
но копии с реестра аналогичной конфигурации достаточно

"Огласите весь список" ( C )

Можете написать все ветки реестра которые нужно копировать?
22 апр 20, 21:49    [22121062]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5914
Leonid Kudryavtsev,

довольно очевидно что
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Application
22 апр 20, 23:52    [22121119]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Перед переустановкой Office не только удалял прежнюю версию,
но и все упоминания его в каталогах и реестре.
Не помогает.
23 апр 20, 08:52    [22121202]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Что касается исходного кода:
EXCEL_APP::EXCEL_APP(){
Variant Books;
Variant Sheets;
int i;

App=Variant::CreateObject("Excel.Application"); // вот тут
...............................
23 апр 20, 08:59    [22121203]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Виноват именно установщик, а я даже и не знаю кто это такой
23 апр 20, 09:02    [22121206]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Кстати, на той же машине под XP всё работает
23 апр 20, 09:03    [22121209]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
muk07
Кстати, на той же машине под XP всё работает

Ты сейчас запутаешь всех окончательно. У тебя есть "та" машина и "эта".

Приведи их версии. В меню Пуск -> winver.
23 апр 20, 10:34    [22121245]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8539
kealon(Ruslan)
Leonid Kudryavtsev,

довольно очевидно что
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Application


no comment
23 апр 20, 15:04    [22121480]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5914
Leonid Kudryavtsev,

давай может ты ванговать не будешь над чужими ответами, дождёмся ответа сабжера, и дальше по ситуации
а то он даже ветку реестра посмотреть не может

PS: и да, любой именной объект прописывается именно так, либо в манифесте если портабельное приложение
23 апр 20, 21:11    [22121720]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 8539
muk07,

На старых Windows OLE Automation мог переставать работать из-за русского имени компьютера. Проверьте какое имя у компьютера, рабочей группы и пользователя (должно быть видно в Control Panel - System ) Если по русски - попытайся поменять на короткое (макс 8 букв) имя только английскими буквами (без каких либо символов). Сталкивался с таким в 1999-2000

kealon(Ruslan),
+

Зачем ванговать:
1)
Насколько я помню, Excel.Application всего лишь синоним для полного названия класса, который по нормальному называется как Excel.Application.8 Excel.Application.10 Excel.Application.22 etc

2)
OLE объекты вообще-то идентифицируются по CLSID, и информация по ним в регистре так же ищется по CLSID
А ProgId это всего лишь еще один синоним/алиас для CLSID. Т.ч. указанная Вами ветка реестра, содержит всего лишь ссылку на соответствующий CLSID и внезапно (!) без регистрации CLSID полностью бессмысленна
https://docs.microsoft.com/ru-ru/windows/win32/com/-progid--key

3)
AFAIK Объекты VBA внезапно на Excel.Application не заканчиваются. Там их десятки, если не сотни. Достаточно в Help посмотреть.

etc...

Достаточно было хотя бы самому в ветку Excel.Application заглянуть Всего два параметра CLSID и CurVer - как-то "бедновато"
24 апр 20, 09:01    [22121851]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5914
+
Leonid Kudryavtsev

1)
Насколько я помню, Excel.Application всего лишь синоним для полного названия класса, который по нормальному называется как Excel.Application.8 Excel.Application.10 Excel.Application.22 etc

записей в реестре можно наплодить очень много
Leonid Kudryavtsev
2)
OLE объекты вообще-то идентифицируются по CLSID, и информация по ним в регистре так же ищется по CLSID
А ProgId это всего лишь еще один синоним/алиас для CLSID. Т.ч. указанная Вами ветка реестра, содержит всего лишь ссылку на соответствующий CLSID и внезапно (!) без регистрации CLSID полностью бессмысленна
https://docs.microsoft.com/ru-ru/windows/win32/com/-progid--key
"слышал звон..."
как мы видим автор ищет по ProgID, что бы предоставить доступ к прошлым версиям компонентов регистрируют такие имена (микрософт как видим добавляет номер версии). API заморачиваться и выяснять "а есть ли версии" не будет, а просто выдаст ошибку что запрашиваемый ProgID не найден
Leonid Kudryavtsev

3)
AFAIK Объекты VBA внезапно на Excel.Application не заканчиваются. Там их десятки, если не сотни. Достаточно в Help посмотреть.

etc...

Достаточно было хотя бы самому в ветку Excel.Application заглянуть Всего два параметра CLSID и CurVer - как-то "бедновато"
Автору 1 конкретный объект нужен. Он пока и эти два параметра сравнить и проверить не может, не надо ставить тележку впереди лошади. Тут надо начинать с "розетка включена?".
Проверит ProgID, будем дальше CLSID проверять
где-то у меня была в закладках ссылка на статью в MSDN о полном порядке загрузки используемом в GetActiveObject, но вот найти что-то не могу
24 апр 20, 22:27    [22122402]     Ответить | Цитировать Сообщить модератору
 Re: OLE из С++  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6602
понимаю, что топик старый, но просто если вдруг еще актуально :)

полезная ссылка


пункты 1) и 2) можно поменять местами. Чтобы проверить ДО начала манипуляций

1) регистрируем COM-сервер
EXCEL.EXE –REGSERVER


2) затем стартуем DCOMCNFG в 32-битном режиме

DCOMCNFG -32


и смотрим здесь

Component Services \ My Computer \ DCOM Config \ Microsoft Excel Application
сегодня, 01:46    [22138739]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить