Хранитель COM - объектов

Опубликовал H A D G E H O G s (Hadgehogs) в раздел Программирование - Практика программирования

Позволяет сохранять COM - объект между серверными вызовами в 8.2. Сохраняет и получает ссылку на объект в ROT (Running Object Table). БЕТА!

Позволяет сохранять COM - объект между серверными вызовами в 8.2. Сохраняет и получает ссылку на объект в ROT (Running Object Table). БЕТА!

Примечание: Каждый объект должен быть сохранен/восстановлен по Уникальному Идентификатору (УИД). Простая строка - не пойдет. Если передан неверный УИД - компонента сгенерит свой. По нему и восстанавливайте COM объект.

В проекте идет пример, там мой тестовый COM объект - Ttest82.Ttest82 - меняйте его на свой и тестите.

З.Ы. По идее (по большой идее) - для stan-alone COM - серверов можно безболезнено завершать весь сеанс 1С8.2. Они должны выжить и без него. Но не проверял.

Скачать файлы

Наименование Файл Версия Размер
COMХранитель
.rar 71,09Kb
18.11.09
72
.rar 71,09Kb 72 Бесплатно

См. также

Комментарии
1. Сергей Смирнов (milanse) 24 19.11.09 17:42 Сейчас в теме
Хранитель.RegisterComObject(КомОбъект,"F2A23405-8D5E-40D0-A245-DC814D3795D9") Возвращает ""
2. H A D G E H O G s (Hadgehogs) 324 19.11.09 17:44 Сейчас в теме
Так, а что за объект?

Столкнулся с тем, что
Excel.Application
Word.Application
не регятся

Счаст разбираюсь.
3. Сергей Смирнов (milanse) 24 19.11.09 18:22 Сейчас в теме
Я использую com сторонних разработчиков
4. H A D G E H O G s (Hadgehogs) 324 19.11.09 18:23 Сейчас в теме
5. Сергей Смирнов (milanse) 24 20.11.09 08:26 Сейчас в теме
я ее еще хочу создавать по сети (дком), тогда наверное не будет работать, но пока локально создаю.
6. Евгений Ю. (Ganjubas) 08.12.09 12:52 Сейчас в теме
КомОбъект=Новый COMОбъект("V81.COMConnector");
Идентификатор=Хранитель.RegisterComObject(КомОбъект,Строка(Новый УникальныйИдентификатор()));

Идентификатор пустой :(
7. Андрей Д. (detec) 122 26.03.10 06:59 Сейчас в теме
Есть ли какие-то особенности работы на x64? У меня запуск идёт на сервере 1С:Предприятие x64. И какие тогда поддерживаются компоненты из x64-сеанса, в смысле, x32/x64?
8. Андрей Д. (detec) 122 29.03.10 10:09 Сейчас в теме
В дополнение к (7). Т.е. ВК написана, судя по всему, для x32, и на x64-сервере просто не загружается.

Источник: http://www.dnjonline.com/article.aspx?id=jun07_access3264

Your 32-bit software is still supported on a 64-bit platform as 32-bit processes can be executed inside the dedicated Windows on Windows' (WOW64) subsystem which is part of all 64-bit Windows operating systems. However a 64-bit process cannot load a 32-bit module into its process space, and a 32-bit processes cannot load a 64-bit module into its process space. The only way that communication can happen between 32-bit and 64-bit modules is through interprocess communication (IPC). In other words, 32-bit and 64-bit processes can exchange data using IPC techniques such as out-of-process COM, sockets, Windows messages or memory mapped files.
9. mc2 6 27.08.10 15:22 Сейчас в теме
Хорошо бы еще наверно уметь удалять зарегистрированный в ROT объект.
Т.е. реализовать метод Revoke()...
10. Константин Зонин (CVZ) 20.10.11 11:25 Сейчас в теме
Если требуется сохранить ссылку на com-объект в пределах сеанса пользователя, то задача решается стандартными возможностями 1С.
Нужно создать общий модуль, установить в его свойствах признак "Сервер" и в поле "Повторное использование возвращаемых значений" выбрать вариант "На время сеанса".

далее вставить функцию создания сом-объекта, что-то типа этого

Функция COMСоединениесИБ(СтрокаНастройкиСоединенияСБазой,ТекстОшибки) экспорт
	Если ПустаяСтрока(СтрокаНастройкиСоединенияСБазой) Тогда
		ТекстОшибки = "Не указаны параметры соединения с информационной базой";
		Возврат Неопределено;
	КонецЕсли; 
	Попытка
		V8 = Новый COMОбъект("V82.COMConnector");
		Возврат V8.Connect(СтрокаНастройкиСоединенияСБазой);
	Исключение
		ТекстОшибки = "Невозможно соединиться с информационной базой, причина:"+символы.ПС +
		ОписаниеОшибки();
		Возврат Неопределено;
	КонецПопытки;
КонецФункции // COMСоединениесИБ()
...Показать Скрыть


При первом вызове этой функции произойдет подключение к базе и оно не разорвется на время работы сеанса пользователя.

И, наконец, самое главное, для чего это все нужно - все последующие вызовы этой функции с таким же значением ее параметра будут возвращать ранее инициализированный сом-объект.
1c-intelligence; twin; Oboron; galich; +4 Ответить 1
11. Andrey Krapivin (kr_andr) 23.11.11 10:34 Сейчас в теме
12. Игор Мудрицкий (Zas1402) 27.05.13 12:44 Сейчас в теме
Хорошо бы еще наверно уметь удалять зарегистрированный в ROT объект.
Т.е. реализовать метод Revoke()...

Было бы не плохо))
13. Олег Грибов (Oboron) 14 14.02.14 12:38 Сейчас в теме
(10) CVZ, Хороший пример. Соответственно если надо заново инициализировать значения, нужно сначала вызвать процедуру "ОбновитьПовторноИспользуемыеЗначения() ".
В типовых конфигурациях еще можно для этого использовать глЗначениеПеременной(..., предварительно добавив в функцию получения нужной переменной инициализацию