Имя: Пароль:
1C
1C 7.7
v7: Внешняя компонента - правильная выгрузка
,
0 ildary
 
26.07.13
21:41
Уважаемые специалисты, посоветуйте пожалуйста, как правильно выгружать внешнюю компоненту. Загружается она вот так:

ЗагрузитьВнешнююКомпоненту( "StrMatch.dll" );
AddIn = СоздатьОбъект( "AddIn.StrMatchExtension" );

Выгружать пытаюсь так: (ПриЗакрытии): AddIn = 0;

Win2003R2 64bit, 1С7.7 27, конфигурация ТиС, компонента strmatch.dll - при первом открытии внешней обработки (где она применяется) - дает правильный результат: если ей на входе давать строку - она с правильным коффициентом совпадения возвращает совпадения. Но если закрыть эту внешнюю обработку и снова открыть - она начинает подглюкивать (возвращает для любой строки не более 2 вариантов) и не помогает ее явная выгрузка типа AddIn = 0. Если закрыть всю 1С, то после повторного ее запуска - снова все начинает работать (ровно один раз). Есть у меня подозрение, что проблемы пошли после перехода на 64 Windows.
1 Гость2
 
26.07.13
21:45
На клюшках внешние компоненты не выгружаются вовсе
2 Гость2
 
26.07.13
21:48
Попытка
    AddIn = СоздатьОбъект( "AddIn.StrMatchExtension" );
Исключение
    ЗагрузитьВнешнююКомпоненту( "StrMatch.dll" );
    AddIn = СоздатьОбъект( "AddIn.StrMatchExtension" );
КонецПопытки
3 ildary
 
26.07.13
22:03
(1) спасибо, не знал. Значит правильно надо грузить как в (2)? Век живи, век учись :)
4 ildary
 
26.07.13
22:05
Вдогонку - а в восьмерке подобное требуется? Или там компонента реально выгружается с закрытием обработки?
5 H A D G E H O G s
 
26.07.13
22:46
(4) По разному.
Вот счаст наслаждаюсь с одной из них.
6 Torquader
 
26.07.13
23:48
Выгрузить можно только OLE-сервер, так как выгружает его система.
Внешняя компонента при загрузке сообщает 1С, какие объекты она поддерживает - 1С запоминает эти объекты и всё - способа - заставить её забыть - нету.
Если уж очень хочется что-то выгрузить для экономии памяти - сделайте компоненту-транслятор, а остальные методы засуньте в OLE-сервер, тогда компонента будет загружать по мере надобности сам сервер, ну а выгружаться он будет сам, когда не нужен.
7 H A D G E H O G s
 
26.07.13
23:49
"сделайте компоненту-транслятор"

Долго и муторно.
8 H A D G E H O G s
 
26.07.13
23:50
Затесть кстати.
8.1
и
8.2

ОбъектКомпоненты=Неопределено;

В 8.1 Done() вызывается.
в 8.2 Done() вызовется при закрытии 1С.
Бида.
9 Torquader
 
26.07.13
23:52
(7) Реально компонента нужна только тогда, когда хотим из неё управлять 1С - в остальных случаях OLE-сервер оказывается даже лучше.
10 H A D G E H O G s
 
26.07.13
23:57
(9) А еще в Тонком, если не сделать Addref() в Done() для ComServer-а - он, Тонкий - падет смертью глупой.

И еще там забавная фишечка с Тонким есть, открывающая неожиданные вещи на бывшие планы 1С, но об этом через недельку.
11 Злопчинский
 
27.07.13
01:14
Для клюшек была/есть примочка, которая позволяет выгружать загрудженные ВК (но искать ее меня не просите).

Strmatch работает устойчиво. без глюков. по кранйей мере у меня не на 64.
12 ildary
 
27.07.13
07:39
(11) он работает, но после закрыл / переоткрыл обработку - начинает возвращать 1, максимум 2 варианта для строки (при чистом запуске - 3 или 4 результата), способ запуска в (2) это вылечил, спасибо Гостю2 за идею.
Я этот глюк встретил, когда начал переносить нетленку из семерки в восьмерку - в восьмерке компонента возвращала 3 результата с одинаковым коэфицциентом совпадения.
13 Torquader
 
27.07.13
23:19
(12) Ну, можно ещё попробовать VbScript.RegExp - оно OLE-сервер и должно работать везде.

(11) Там был метод в одной из VK (выгрузить), только не всегда оно работало.

Просто, чтобы выгрузить компоненту, нужно сделать Done в интерфейсе, чтобы она освободила все занятые ресурсы - далее можно выгружать Dll. Но, если dll создавала какие-то дочерние потоки при загрузке - не всегда проходил фокус по выгрузке - чаще было просто падение 1С (вызов abort из dll именно к этому и приводит).
14 Злопчинский
 
28.07.13
01:56
(12) нормально он работает, и возвращает как положено хоть обобзывайся туеву хучу раз.. по крайней мере у меня - работает. м.б. все зависит от размеров кеша сравнения..? ну и с номерами кешей надо аккуратно быть...
15 ildary
 
28.07.13
11:45
(14) нормально он работает в 7.7. В 8.2 - нашел глюк (может наглючил при переносе из 7.7 - надо будет поковырять). С кешами   и их номерами - согласен, я их предварительно чищу перед заполнением.
Основная теорема систематики: Новые системы плодят новые проблемы.