IE2017

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

Программирование - Практика программирования

Позволяет сохранять 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
74
.rar 71,09Kb 74 Скачать бесплатно

См. также

Комментарии
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) 328 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) 328 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) 128 26.03.10 06:59 Сейчас в теме
Есть ли какие-то особенности работы на x64? У меня запуск идёт на сервере 1С:Предприятие x64. И какие тогда поддерживаются компоненты из x64-сеанса, в смысле, x32/x64?
8. Андрей Д. (detec) 128 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 9 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, Хороший пример. Соответственно если надо заново инициализировать значения, нужно сначала вызвать процедуру "ОбновитьПовторноИспользуемыеЗначения() ".
В типовых конфигурациях еще можно для этого использовать глЗначениеПеременной(..., предварительно добавив в функцию получения нужной переменной инициализацию
Оставьте свое сообщение