![]() |
|
Как найти ошибку во внешней компоненете? | ☑ | ||
---|---|---|---|---|
0
Валерыч
26.09.08
✎
09:30
|
Здравствуйте, уважаемые.
Возникла необходимость написать внешнюю компоненту. Написал: http://infostart.ru/projects/2569/ Под 8-кой работает. Под 7.7 - не хочет. Читал инструкции, форумы и т.п. - никакие танцы с бубнами не помогают. Кто знает секрет, подскажите что надо подкрутить в исходнике (Delphi) чтобы заработало под 7.7 Ошибки такие: если гружу ее инструкцией Рез = ЗагрузитьВнешнююКомпоненту("CyberDVV.dll"); выдает Ошибка при инициализации объекта из компоненты C:\PROGRA~1\1Cv77\BIN\CyberDVV.dll Если регистрирую ее и использую конструкцию Рез = ПодключитьВнешнююКомпоненту("AddIn.CyberDVV"); выдает Ошибка при инициализации объекта из компоненты <Неизвестная компонента> |
|||
1
ТелепатБот
гуру
26.09.08
✎
09:30
|
||||
2
Jolly Roger
26.09.08
✎
09:37
|
(0) В ресурсе прогИд прописан?
|
|||
3
v77
26.09.08
✎
09:42
|
Ну дык в отладчике посмотри
|
|||
4
Валерыч
26.09.08
✎
09:43
|
(2) прописал - все то же самое
(3) в чьем отладчике? 1С? или Delphi? |
|||
5
v77
26.09.08
✎
09:47
|
Delphi
|
|||
6
v77
26.09.08
✎
09:48
|
я бы посмотрел сам, да у меня не компилится. там у тя какие то модули, которых у меня нету
|
|||
7
Валерыч
26.09.08
✎
09:48
|
(5) подскажи как - dll загружается динамически.
|
|||
8
Валерыч
26.09.08
✎
09:50
|
стандартный Delphi 6 ничего больше
использую 2 Indy компоненты |
|||
9
v77
26.09.08
✎
09:56
|
Ну у меня не Delphi 6
отладка dll в меню Run/Parameters Host Application указываешь там экзешник одинески. дальше как обычно. ставишь точки останова и жмешь F9. запускается 1С и пошло поехало. удачи |
|||
10
Sadovnikov
26.09.08
✎
09:56
|
Не хотит компилиться она...
|
|||
11
H A D G E H O G s
26.09.08
✎
10:02
|
Попробуй убрать из Init-а все свое..
Сделай метод компоненты типа МояВК.Инициировать(); |
|||
12
Валерыч
26.09.08
✎
10:18
|
прошелся отладчиком: выполняется Init - нормально доходит до конца и возвращает S_OK
потом заходит в GetInfo: varInfo := '2000'; PutNParam(pInfo,0,varInfo); GetInfo := S_OK; нормально выполняется потом сразу идет в Done (Почему?) |
|||
13
v77
26.09.08
✎
10:23
|
Понатыкай точек везде. у тебя там еще страница свойств есть. мож там чего
|
|||
14
Валерыч
26.09.08
✎
10:30
|
понатыкал везде, где только можно:
до Init идет в блок страницы свойств initialization TActiveXPropertyPageFactory.Create( ComServer, TAddInPropPage, Class_AddInPropPage); end. потом AddinObj initialization ComServer.SetServerName('AddIn'); TComObjectFactory.Create(ComServer,TAddInObject,CLSID_AddInObject, 'CyberPlatDVV','CyberPlat v 1.0',ciSingleInstance); end. ну а потом как уже писал |
|||
15
Валерыч
26.09.08
✎
10:31
|
(6), (10) чего не хватает, чтобы скомпилилась - может я вышлю. Помогите, пожалуйста.
|
|||
16
H A D G E H O G s
26.09.08
✎
10:37
|
Убери из Init -а
Crypt_Initialize; |
|||
17
H A D G E H O G s
26.09.08
✎
10:38
|
И попробуй. Если нормально - проблема с Dll-ой
|
|||
18
Валерыч
26.09.08
✎
10:41
|
(16) убрал - все абсолютно также
|
|||
19
v77
26.09.08
✎
10:47
|
а Init вызывается два раза? или один?
раньше вроде два раза было. может чо нибудь понаписать чтобы в Init два раза не выполнять одно и тоже |
|||
20
v77
26.09.08
✎
10:48
|
я так всегда пишу
if not IsLoaded then begin varFPList.pErrorLog := nil; pConnection.QueryInterface(IID_IErrorLog, varFPList.pErrorLog); varFPList.pEvent := nil; pConnection.QueryInterface(IID_IAsyncEvent, varFPList.pEvent); ..... |
|||
21
H A D G E H O G s
26.09.08
✎
10:57
|
Ну тогда домой приду - будет время, попробую.. Тут на работе Дельфи нет
|
|||
22
Валерыч
26.09.08
✎
11:28
|
(19) вызывается один раз
|
|||
23
Валерыч
26.09.08
✎
11:33
|
под 8-кой где нормально работает
после Init и GetInfo вызывается RegisterExtentionAs, потом GetPages, а Done нет |
|||
24
H A D G E H O G s
26.09.08
✎
11:35
|
(23)
А семерочный 1С-код покажи |
|||
25
Валерыч
26.09.08
✎
11:40
|
Рез = ПодключитьВнешнююКомпоненту("AddIn.CyberDVV");
//Рез = ЗагрузитьВнешнююКомпоненту("CyberDVV.dll"); Если Рез <> 1 Тогда Предупреждение("Ошибка загрузки"); Возврат; КонецЕсли; Сообщить("Объект создан"); Кибер = СоздатьОбъект("AddIn.CyberDVV"); Сообщить("Код оператора " + Кибер.Порт); Возвращает Рез = 1 и выдает ошибку в окне сообщений |
|||
26
Валерыч
26.09.08
✎
11:41
|
пробовал и
Кибер = СоздатьОбъект("AddIn.CyberPlatDVV"); |
|||
27
АЛьФ
26.09.08
✎
11:49
|
В качестве бреда...
Попробуй в семерке так: Кибер = СоздатьОбъект("CyberDVV.CyberPlatDVV"); |
|||
28
Валерыч
26.09.08
✎
11:57
|
попробовал бы, но до создатьОбъект она даже не доходит
|
|||
29
АЛьФ
26.09.08
✎
12:00
|
2(28) Погоди. Ты ж написал, что выдает ошибку "в окне сообщений". Или все же выдает предупреждение с ошибкой? Какую ошибку-то выдает?
|
|||
30
Валерыч
26.09.08
✎
12:01
|
в окне сообщений
|
|||
31
АЛьФ
26.09.08
✎
12:03
|
2(30) Что выдает-то? И на какой строке?
|
|||
32
Валерыч
26.09.08
✎
12:08
|
если гружу ее инструкцией
Рез = ЗагрузитьВнешнююКомпоненту("CyberDVV.dll"); выдает Ошибка при инициализации объекта из компоненты C:\PROGRA~1\1Cv77\BIN\CyberDVV.dll Если регистрирую ее и использую конструкцию Рез = ПодключитьВнешнююКомпоненту("AddIn.CyberDVV"); выдает Ошибка при инициализации объекта из компоненты <Неизвестная компонента> имеено на этих строках |
|||
33
v77
26.09.08
✎
12:09
|
procedure TAddInObject.PutNParam(var pArray: PSafeArray; lIndex: Integer; var varPut: OleVariant);
begin SafeArrayPutElement(@pArray, lIndex, varPut); end; убери собаку в @pArray и радуйся procedure TAddInObject.PutNParam(var pArray: PSafeArray; lIndex: Integer; var varPut: OleVariant); begin SafeArrayPutElement(pArray, lIndex, varPut); end; |
|||
34
v77
26.09.08
✎
12:13
|
вот где собака зарылась :)
|
|||
35
Валерыч
26.09.08
✎
12:19
|
огромное спасибо.
Код брал из шаблона - даже не разбирался что он делает |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |