Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Загрузчик внешних компонент, vkloader , для 1С 7.7          
igmig65 Подменю пользователя
сообщение 20.03.09, 13:26
Сообщение #1

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 613
Из: Донецкая обл
Спасибо сказали: 168 раз
Рейтинг: 140.9

Загрузчик внешних компонент


Оч. удобная штука, уже давно ей пользуюсь

ВК, которая умеет сама загружаться без регистрации ее в реестре, и загружать остальные ВК, также без их регистрации.
Если у вас при загрузке некоторых ВК появляются ошибки "Отсутствует CLSID", "Отсутствует интерфейс IInitDone",
то это для вас.

Версия: 1.0.0.2


Описание

vkloader (далее ВК) - внешняя компонента для 1С-Предприятия 7.7, которая может загружаться без ее регистрации в реестре, и загружать другие внешние компоненты без их регистрации. Предназначена для беспроблемной загрузки внешних компонент пользователями, не имеющими прав на запись в HKCR ветку реестра.

Принцип работы основан на перехвате обращения 1С к WinAPI функциям CLSIDFromProgID и CoCreateInstance.

Также ВК решает проблему "зависания" процесса 1С в памяти при закрытии программы при использовании несовсем корректно написанных сторонних внешних компонент.

Использование

Для работы ВК необходимо загрузить ее в процедуре ПриНачалеРаботыСистемы.


Процедура ПриНачалеРаботыСистемы()
ЗагрузитьВнешнююКомпоненту("vkloader.dll");


Благодаря некоторым хитростям, ВК загружается без всякой ее регистации в реестре, то есть всегда.

Для загрузки других внешних компонент без их регистрации в реестре, необходимо воспользоваться объектом ЗагрузчикВК. Сначала необходимо получить информацию о внешней компоненте, а именно ее ProgID, и CLSID. Для удобства получения этой информации существует сервисный метод КодЗагрузки. Когда эта информация (она всегда постоянна для каждой конкретной внешней компоненты независимо от компьютера и среды ее выполнения) получена, можно вдальнейшем загружать внешнюю компоненту методом ЗагрузитьВК.

Для примера работа с 1С++



Сначала один раз под пользователем с правами админа выполняем в любой базе следующий код:
ЗагрузитьВнешнююКомпоненту("vkloader.dll");
звк = СоздатьОбъект("ЗагрузчикВК");
Рез = звк.КодЗагрузки("1cpp.dll");
Если Рез.КодОшибки = 0 Тогда
Сообщить(Рез.Результат);
Иначе
Сообщить("Ошибка " + Рез.КодОшибки + РазделительСтрок + Рез.Результат);
КонецЕсли;


При успешном выполнении в окне сообщений выводится фрагмент програмного кода на языке 1С. Выделяем его и копируем.

Далее в "боевой" конфигурации в ПриНачалеРаботыСистемы заменяем:


ЗагрузитьВнешнююКомпоненту("1cpp.dll");


на:


ЗагрузитьВнешнююКомпоненту("vkloader.dll");


и вставляем код, скопированный ранее из окна сообщений:


Загрузчик = СоздатьОбъект("ЗагрузчикВК");
Результат = Загрузчик.ЗагрузитьВК("1cpp.dll", "Addin.1C++=fde5ae76-00b3-4bdb-921b-d5937997b1b7");


Сохраняем конфигурацию. Все. Теперь 1С++ будет загружаться на любой машине без регистрации ее в реестре.

Следует отметить, что после успешного выполнения ЗагрузитьВК, применение обычного метода ЗагрузитьВнешнююКомпоненту для этой ВК будет происходить также успешно. Например, во многих типовых ЗагрузитьВнешнююКомпоненту("v7plus.dll") встречается во многих местах, по месту необходимости. Достаточно в ПриНачалеРаботыСистемы загрузить ее загрузчиком, и штатный вызов ЗагрузитьВнешнююКомпоненту("v7plus.dll") также будет отрабатывать успешно.


Объекты

ЗагрузчикВК

(AddinLoader)

Предназначен для загрузки других внешних компонент и формирования кода их загрузки.

Создается с помощью СоздатьОбъект("ЗагрузчикВК");

Методы

КодЗагрузки
(GetLoadCode)

Синтаксис: КодЗагрузки(ПутьКФайлу);

Параметры:
ПутьКФайлу - строка. Путь к файлу внешней компоненты.

Возвращает: Объект РезультатВыполнения. При успешном вызове поле Результат содержит фрагмент програмного кода для загрузки указанной ВК, иначе - описание ошибки.

Описание: Формирует фрагмент програмного кода для загрузки ВК.

Это сервисный метод, избавляющий вас от необходимости ковырять файлы внешних компонент и реестр для выяснения их ProgID и CLSID. Его необходимо вызывать один раз администратором при вводе указанной внешней компоненты в эксплуатацию. Далее полученный код можно использовать для загрузки ВК обычными пользователями.


ЗагрузитьВК
(LoadAddin)

Синтаксис: ЗагрузитьВК(ПутьКФайлу, ИдентификаторыВК);

Параметры:
ПутьКФайлу - строка. Путь к файлу внешней компоненты.
ИдентификаторыВК - строка. Содержит соответствие ProgID объектов компоненты их CLSID. Проще всего получить эту строку с помощью метода КодЗагрузки.

Возвращает: Объект РезультатВыполнения. При успешном вызове поле Результат содержит список успешно загруженных объектов ВК, иначе - описание ошибки.

Описание: Загружает указанную внешнюю компоненту.

При этом при загрузке подменяется штатный механизм получения CLSID компоненты и создания ее объектов. Это гарантирует загрузку ВК при отсутствии прав на запись в HKCR ветку реестра, а также то, что будет выполнятся именно тот файл, который указан при вызове метода, а не последний указанный в реестре.

РезультатВыполнения

Объект предназначен для возврата результата выполнения методов объекта ЗагрузчикВК.

Свойства

КодОшибки

Доступ: Только чтение.

Тип: Число.

Описание: Содержит числовой код результата.
0 - выполнено успешно
1 - неправильный параметр
2 - файловая ошибка
3 - отсутствуют ProgIDs в компоненте.
4 - Предупреждение. Не для всех объектов ВК удалось получить CLSID
5 - не переданы параметры загрузки компоненты.
6 - в компоненте не найдена функция DllGetClassObject

Результат
Доступ: Только чтение.

Тип: Строка.

Описание: В случае успеха содержит результат выполнения, иначе - описание ошибки.

Код загрузки нескольких распространенных ВК

v7plus.dll:


Загрузчик = СоздатьОбъект("ЗагрузчикВК");
Результат = Загрузчик.ЗагрузитьВК("v7plus.dll", "Addin.V7Mail=faa6ebe0-1069-11d4-a5ff-008048da0cd2
|Addin.V7SysInfo=046d5520-2c8f-11d4-a62a-008048da0cd2
|Addin.V7HttpReader=1e7bc440-1076-11d4-a635-004095e0ebd2
|Addin.XMLParser=bb45ed80-1ad7-11d4-a635-004095e0ebd2
|Addin.V7TextFile=921da8db-1e6f-4d61-8f49-a3127b799b19");


1cpp.dll:


Загрузчик = СоздатьОбъект("ЗагрузчикВК");
Результат = Загрузчик.ЗагрузитьВК("1cpp.dll", "Addin.1C++=fde5ae76-00b3-4bdb-921b-d5937997b1b7");


turbomd.dll:


Загрузчик = СоздатьОбъект("ЗагрузчикВК");
Результат = Загрузчик.ЗагрузитьВК("turbomd.dll", "Addin.TurboMD=dc04a720-7f85-11d8-9fcd-c4cb45b9fe08");


turbobl.dll:


Загрузчик = СоздатьОбъект("ЗагрузчикВК");
Результат = Загрузчик.ЗагрузитьВК("turbobl.dll", "Addin.TurboBL=9f959861-909f-11d7-8d5e-9acf313eb700");


formex.dll:


Загрузчик = СоздатьОбъект("ЗагрузчикВК");
Результат = Загрузчик.ЗагрузитьВК("formex.dll", "AddIn.FormEx=5142b2ce-c533-473f-8bb4-4385c47732c5");


Скачать:
Версия: 1.0.0.2: Прикрепленный файл  vkloader.zip ( 24,88 килобайт ) Кол-во скачиваний: 172

Исходники (MS VC++ 6.0): Прикрепленный файл  vkloadersrc.zip ( 773,14 килобайт ) Кол-во скачиваний: 67
Причина редактирования: Добавил кое-что

Спасибо сказали: bogdan3112, caprica, CheSlavich, Gleef, Vofka,

igmig65 Подменю пользователя
сообщение 14.05.16, 8:02
Сообщение #2

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 613
Из: Донецкая обл
Спасибо сказали: 168 раз
Рейтинг: 140.9

Нужно сказать, столкнулся совсем недавно:
компонента конфликтует с BARCODE.OCX, 1ска вылетает, причину не нашел, когда именно вылетает тоже закономерности не заметил..

Спасибо сказали: Vofka,

Sweta Подменю пользователя
сообщение 02.03.18, 12:52
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0

Спасибо.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 19:18
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!