Имя: Пароль:
1C
1С v8
8.2 и COM-объект
,
0 greenzmo
 
11.08.11
18:22
Всем доброго времени суток!
У меня следующая история:
Около года назад наша компания силами фрилансера разработала внешнюю компоненту для чтения данных с com-порта. Моя задача как 1С-ника состояла в том, чтобы написать некий код по взаимодействию с методами этой компоненты в 1С - что я благополучно и сделал. Фрилансер сделал установщик компоненты, он ее регистрировал в реестре Винды, а я ее вызывал в коде с помощью:
ПодключенныйОбъект = Новый ComОбъект(ProgIDКомпоненты)
Все работало прекрасно.
Недавно, клиент захотел приобрести у нас эту компоненту. Я перед отгрузкой решил ее протестировать - и ВОТ ТЕ РАЗ - НЕ РАБОТАЕТ!!!
Фрилансер в отпуске, я в dll вообще ни шарю ((( Но руководство поставило задачу разобраться что к чему - клиент, оказывается, уже заплатил!...
Перестанавливал компоненту - не помогает, устанавливал на другой комп - таже фигня. Полез в код: вместо ПодключенныйОбъект = Новый ComОбъект(ProgIDКомпоненты) написал ПодключитьВнешнююКомпоненту(ProgIDКомпоненты) - система НЕ ругнулась. Потом написал ПодключенныйОбъект = Новый(ProgIDКомпоненты) - система СНОВА РУГАЕТСЯ!

Вообщем, не могу понять, в чем проблема - в компоненте (ее никто не трогал с момента написания) или в 1С-ке :(

Буду рад любым советам по этому поводу!

P.S. Как, по каким стандартам и через какие помощники пишутся компоненты .dll Я НЕ в курсе, но видимо придется разбираться...
1 БибиГон
 
11.08.11
18:52
*система СНОВА РУГАЕТСЯ

как ругается хоть?
2 Fram
 
11.08.11
18:56
(0) установи под правами админа. а для уверенности еще UAC отключи перед установкой
3 greenzmo
 
11.08.11
19:07
(1) уходит в ветку исключения конструкции Попытка Исключение КонецПопытки
(2) устанавливал по админскими правами. У меня XP стоит :)
4 Fragster
 
гуру
11.08.11
19:08
пц. Сообщить(описаниеошибки());
5 zladenuw
 
11.08.11
19:49
а может ее нужно зарегать что бы 1с увидела ? а ?
6 zladenuw
 
11.08.11
19:49
Новый ComОбъект вроде как для зарегистрированных компонентов.
7 Fram
 
11.08.11
20:05
(5) читай (0) внимательно  "Фрилансер сделал установщик компоненты, он ее регистрировал в реестре Винды..."
8 smaharbA
 
11.08.11
20:20
может позырить в реестре сначала
9 Tahallus
 
11.08.11
20:40
(3) походу ты еще и в 1С плаваешь. а убрать попытку и увидеть не судьба? или сделать как в (4)
10 greenzmo
 
12.08.11
10:50
(9) У вас мозг на тело, случаем, не давит?
11 greenzmo
 
12.08.11
11:03
(4) Да, не догадался:
В описании ошибки пишет "Класс не зарегистрирован"
НО, в реестре он ЕСТЬ - в ветке Software -> Classes!

Я также пробовал регистрировать вручную:
regasm регистрирует - с параметром /tlb без ошибок, а если добавить еще параметр /codebase, то выводит след. сообщение:
RegAsm : warning RA0000 : Регистрация сборки без подписи с использованием параметра /codebase может вызвать конфликт данной сборки с другими приложениями, которые могут быть установлены на том же компьютере. Параметр /codebase предназначен только для сборок с подписями. Присвойте сборке строгое имя и повторите регистрацию.

regsrv32 пишет, что dll зарегистрирована, но найти точку входа для DllRegisterServer не удалось - и потом пишет, что зарегистрировать этот файл невозможно.
12 hhhh
 
12.08.11
11:16
(11) но, кому нужно это твое тестирование? ОТгрузи ее клиенту и не парься. Это вообще не твой участок.
13 Tahallus
 
12.08.11
11:33
(10) нет не давит.
(11) А разработки случаем не оставлял еще какой нибудь reg файл, потому что ошибка "warning RA0000" это не выставленный ComVisible в true , и значит через regasm его не как не установить.
14 Tahallus
 
12.08.11
11:34
(13) разработки = разработчик
15 greenzmo
 
12.08.11
11:43
(13) Хорошо, а то я подумал... :)
Нет, разработчик оставил только Setup и пример регистрации с помощью regasm с кодами /codebase и /tlb. Причем, как я писал, без кода /codebase регистрируется без ошибки "warning RA0000".
И к тому же, я же вижу в реестре этот класс! И компонента год назад работала!
Думаю грешить на Винду...
16 greenzmo
 
12.08.11
11:44
(12) Это не мой принцип работы! :)
17 Alex375
 
12.08.11
12:04
Попробуй еще dll положить в bin своей 1С-ки
18 hhhh
 
12.08.11
12:04
(16) а как же ты клиентам типовые продаешь с твоими принципами? Ведь если их установить и протестировать, то возникнет точно такая же ситуация.
19 greenzmo
 
12.08.11
12:19
(17) не помогает
(18) в смысле?
20 Tahallus
 
12.08.11
14:10
Попробуй поставить на другом компа где ранее она не стояла.
21 greenzmo
 
12.08.11
17:06
(20) Делал на трех машинах - никакого результата
22 Serginio1
 
12.08.11
18:51
(15) Это предупреждение, смотри зарегестрировлся ли класс в регистре и есть ли там параметр CodeBase. Посмотри права на папку. RegAsm должен соответствовать версии фреймворка компоненты
23 Serginio1
 
12.08.11
18:53
Плюс возможно нужно положить дополнительные библиотеки
24 greenzmo
 
18.08.11
18:04
(22) Класс зарегистрирован и параметр CodeBase есть. Поиском прога RegAsm обнаруживается только в папке с версией 2.0 (папка v2.0.50727). Есть также версии 3.0 и 3.5, но проги там НЕТ. Версию 3.5 требует установщик компоненты при инсталяции

ПРОИЗОШЛО НЕЧТО ИНТЕРЕСНОЕ!
Я изменил системную дату компьютера на год раньше и О ЧУДО - COM-объект СОЗДАН!!!
25 EvgeniuXP
 
18.08.11
18:16
(0) зарегистрируй библиотечку...
26 Serginio1
 
18.08.11
18:18
Ну так свакай нужный фреймворк
27 Serginio1
 
18.08.11
18:23
Чудес не бывает. Посмотрел бы библиотеку рефлектором. Кстати а исходники то он вам оставил?
28 greenzmo
 
18.08.11
18:30
(26) что значит свакай?
(27) что за рефлектор?
:)
Исходников нет - только setup.
29 Serginio1
 
18.08.11
18:44
(28) Скачай. Рефлектор это Reflector.exe им можно посмотреть исходный код твоей библиотеки.
Кроме CodeBase есть еще RuntimeVersion.
Но проще изучить исходники через рефлектор
30 GoldenDawn
 
18.08.11
18:55
(0)пипец...
если нет исходника + компилятора и не работает заявленный интерфес шли своё начальство лесом пусть танцуют с бубном сами