Имя: Пароль:
IT
Админ
Регистрация DLL
,
0 Grobik
 
29.05.13
17:17
Захотелось воспользоваться Padeg_ua для склонения украинских ФИО.

Зарегистрировал компоненту.

Добавил


Функция СклонениеФИО(ФИО,Падеж) Экспорт
   ЗагрузитьВнешнююКомпоненту("C:\WINDOWS\SysWOW64\Padeg_ua.dll");
   Попытка
   Скл = Новый COMОбъект("Padeg_ua.Declension");  
   Исключение
       ТекстОшибкиПриПодключении        = ОписаниеОшибки();;
       Сообщить(ТекстОшибкиПриПодключении);
       Возврат Ложь;
   КонецПопытки;
   
   Результат = Скл.GetFIOPadegFS(Строка(ФИО),"",Падеж);
   Возврат Результат;
КонецФункции

в ПроцедурыУправленияПерсоналом

В локальной базе работает. В сетевой под терминалом пишет:
"Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса"

В сетевой при запуске 1С на сервере работает. После этого в терминале нет.

Файл кидал в "C:\WINDOWS\SysWOW64\Padeg_ua.dll".
В реестре ProgID есть и в HCR и в HKLM. "Padeg_ua.Declension"
CLSID = {B21B2752-8C41-41D8-A0DC-98A368D8296E}

ЧЯДНТ? И как побороть?
1 Лефмихалыч
 
29.05.13
17:18
как вариант - отказаться от 64битной семерки
2 Grobik
 
29.05.13
17:18
Букву "Я" и "G" на тему "Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса" изучил внимательно.
3 Grobik
 
29.05.13
17:20
(1) На сервере 32 гига памяти. 32-битку туда ставить?
Терминал из-под 32-битных ХП или 7.
4 Grobik
 
29.05.13
17:21
Стоп.
ЗагрузитьВнешнююКомпоненту("C:\WINDOWS\SysWOW64\Padeg_ua.dll");

Этого я конечно не писал ;)
5 Grobik
 
29.05.13
17:40
Сейчас на форуме 2000 чел.

И никто не сталкивался с проблемой когда на сервере все нормально а в терминале  "Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса" при использовании DLL-к?
6 Kreont
 
29.05.13
17:43
А что стандартные не подходят ф-и из конфигураций?
поищи по словам "Просклонять"
7 victor79
 
29.05.13
17:52
насколько я понимаю, ЗагрузитьВнешнююКомпоненту это для ВНЕШНИХ КОМПОНЕНТ (что то же COM объект, но специальный для 1С). Ты же используешь обычный COM объект, не являющийся ВК, регистрировать который нужно "regsvr32 <файл.длл>" (под админом).

С другой стороны ты упомянул, что в реестре есть "Padeg_ua.Declension", потому непонятно почему не работает. Попробуй заново зарегить regsvr32 и 1С запустить под админом. Если все равно не заработает, значит кривая длл и для 64 винды не работает.
8 Grobik
 
29.05.13
17:56
(7) см (4) Загрузить не писал, скопипастил с соседнего окна браузера пример.

>>  1С запустить под админом
Запускал конечно, раз уж пишу что работает.

(6)   NameDecl.dll говорят украинские ФИО хуже переносит.
Да в все равно она не зарегистрирована.

В ПросклонятьФамилиюИмяОтчество и т.д. только вызовы ВК.
9 Serginio1
 
29.05.13
18:03
Сетевая SQL? Вызываешь на клиенте или сервере?
Возможно использовать 32 разрядные DLL 64 разрядном приложении
http://www.steeltrace.ru/details/articleid/22/регистрация-1с-com-компонента-для-работы-с-64-битными-приложениями.aspx
10 Grobik
 
29.05.13
18:14
(9) Спасибо за помощь.

SQL тут при чем?
64 разрядное приложение это какое?
КОМ=Новый COMОбъект("V82.COMConnector"); в это-же самое время, в этом-же самом месте работает.
11 Serginio1
 
29.05.13
18:17
(10) В том, что SQL это клиент сервер и код может выполняется на сервере приложений. Сервер приложений может быть 64 и 32 разрядным. В поставку 64 сервером есть и 64 разрядная comcntr.dll.
12 Grobik
 
29.05.13
18:24
comcntr.dll работает.

Padeg_ua.dll на сервере работает, в терминале нет.
13 Serginio1
 
29.05.13
18:32
А ПодключитьВнешнююКомпоненту("Padeg_ua.Declension")
14 Serginio1
 
29.05.13
18:32
Может прав на папку не хватает у клиента под терминалом?
15 Serginio1
 
29.05.13
18:34
Или попробовать как Новый ComОбъект("Padeg_ua.Declension")
16 victor79
 
29.05.13
18:48
(8) так я про что и говорю, что ЗагрузитьВнешнююКомпоненту это здесь лишнее и бесполезное, а нужно regsvr32 из командной строки. Хотя это наверняка было для семерки, а для 8 может сделали универсальной.

Вот вспомнил, для винды 64 + длл 32 - раздел CLSID располагается в другом разделе реестра - не как в 32 (кажется в WOW32). Возможно это было верно только для виндов от седьмой, и вин 2003 х64 был по старому - наверняка не помню. Если компонента скомпилена на компиляторе не понимающем этого, то придется править реестр вручную. Для дельфей до 7 включительно оно работало криво.
17 Grobik
 
30.05.13
09:35
(13) По идее это лишнее. Тем не менее пробовал — не помогает.

(15) Это есть.

(16) Так все и сделано.
Сервер на 2008, а клиенты какая разница?
18 Grobik
 
30.05.13
11:50
Запускаю с терминала

regedit

"Padeg_ua.Declension" не набюдается.

Запускаю

regsvr32 /n /i:test C:\Users\test\WINDOWS\system\padeg_ua.dll

пишет

Модуль "C:\Users\test\WINDOWS\system\padeg_ua.dll" загружен,  но точка входа в процедуру DllRegisterServer не найдена.

Вот этот товарищ хоть бы отписался, как заборол
v8: Внешние компоненты 1с 8.2
19 Grobik
 
30.05.13
11:52
Напоминаю на сервере регистрируется и работает. В терминале нет.
20 Serginio1
 
30.05.13
13:39
(19) 14 читал? Может быть проблема типа
v8: регламентное задание и Ексель
21 Grobik
 
30.05.13
14:13
>> А файл есть на СЕРВЕРЕ?

Напоминаю на сервере регистрируется и работает.
22 Grobik
 
30.05.13
14:14
2. Модуль "C:\Users\test\WINDOWS\system\padeg_ua.dll" загружен НО бла-бла.

ИМХО это значит, что есть.
23 Grobik
 
30.05.13
14:15
Хотя вариант с "C:\Users\хххх\WINDOWS\system\padeg_ua.dll" чисто отладочный. Не буду же я всем юзерям его раскидывать и регистрировать. Даже батником.
24 Serginio1
 
30.05.13
14:25
Попробуй с правами DCOM как в 20.
25 Serginio1
 
30.05.13
14:26
v8: регламентное задание и Ексель
сообщение 20
Подсказали решение на SQL.ru
На сервере необходимо было еще установить в локальных политиках право на запуск DCOM для конкретных пользователей.
и, о чудо, все заработало :-)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший