IDispatch

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 14:22

ДА. :evil: (англ.: YES, нем.: YA)
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 14:28

Только не надо меня спрашивать, запустил ли я 1С
Есть ли у меня вопрос? У меня всегда есть вопрос

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 17.11.2004 (Ср) 14:34

как я понял из твоих постов:

ты создал DLL на vb6 и пытаешся пользовать ее в 1С.
Возникли некоторые пробл. и ты хочешь произвести отладку кода DLL?

Если да то очень интересует

Как создается твой объект (DLL) в 1С ( кинь кусок кода на 1С)
Последний раз редактировалось codemaster 17.11.2004 (Ср) 14:37, всего редактировалось 1 раз.

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 14:36

Или уж давайте пошагово :)
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 14:36

codemaster писал(а):как я понял из твоих постов:

ты создал DLL на vb6 и пытаешся пользовать ее в 1С.
Возникли некоторые пробл. и ты хочешь произвести отладку кода DLL?

Да
Секунду...
Последний раз редактировалось Eugenio 17.11.2004 (Ср) 14:41, всего редактировалось 1 раз.
Есть ли у меня вопрос? У меня всегда есть вопрос

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.11.2004 (Ср) 14:37

Eugenio писал(а):ДА. :evil: (англ.: YES, нем.: YA)

Нем. JA :evil:


Не знаю даже, что у тебя не так...
Изображение

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 14:39

tyomitch писал(а):
Eugenio писал(а):ДА. :evil: (англ.: YES, нем.: YA)

Нем. JA :evil:

Ага, точно :)
Есть ли у меня вопрос? У меня всегда есть вопрос

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 17.11.2004 (Ср) 14:43

Eugenio писал(а):Да


Делаем следующие манипуляции:

На закладке Debugging

ставим крыжик напротив Start Programm
ниже выбираем путь к 1С ......exe

Запускаем проект (F5) отлаживаем.

P.S. Иногда приходится вместо 1С ......exe пользовать bat
файл - прописать каталоги DB и пользователя с паролем.
Последний раз редактировалось codemaster 17.11.2004 (Ср) 14:44, всего редактировалось 1 раз.

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 14:44

codemaster писал(а):очень интересует

Как создается твой объект (DLL) в 1С ( кинь кусок кода на 1С)


Код: Выделить всё
   
ЗагрузитьВнешнююКомпоненту("AddInA.dll")
ExtObject = СоздатьОбъект("AddIn.Object2");
ExtObject.ShowMessageBox("O!");
Есть ли у меня вопрос? У меня всегда есть вопрос

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 17.11.2004 (Ср) 14:47

Eugenio писал(а):ЗагрузитьВнешнююКомпоненту("AddInA.dll")
ExtObject = СоздатьОбъект("AddIn.Object2");


не забудь про "правильный" Instancing у Object2 в твоей DLL

см. выше помогло?

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 14:48

codemaster писал(а):На закладке Debugging

ставим крыжик напротив Start Programm
ниже выбираем путь к 1С ......exe

Запускаем проект (F5) отлаживаем.

Это я уже по совету tyomitch'а тоже попробовал:
прописал путь к 1С со всеми ключами,
прописал в 1С создание объекта при старте,
1С запутилась - к объекту я потом обратился (он был сохранен в глоб. переменной) - он команду выполнил. в debugger'е - ничего.
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 14:50

codemaster писал(а):не забудь про "правильный" Instancing у Object2 в твоей DLL

что именно проверить? :?
Есть ли у меня вопрос? У меня всегда есть вопрос

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 17.11.2004 (Ср) 14:53

В классе Object2 добавим следущее

Код: Выделить всё
Private Sub Class_Initialize()
'
Debug.Print  "Class_Initialize()"
'
End Sub



запустим и посмотрим в Immed. Window Ctl+G

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 17.11.2004 (Ср) 14:55

Eugenio писал(а):
codemaster писал(а):не забудь про "правильный" Instancing у Object2 в твоей DLL

что именно проверить? :?


он должен быть MultiUse

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.11.2004 (Ср) 15:00

Eugenio писал(а):
Код: Выделить всё
   
ЗагрузитьВнешнююКомпоненту("AddInA.dll")
ExtObject = СоздатьОбъект("AddIn.Object2");
ExtObject.ShowMessageBox("O!");

"Меня терзают смутные сомненья..." (с)
Неужели 1С может подключать компоненты только по имени файла, а не по CLSID, как все нормальные COM-клиенты?
Изображение

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 15:17

tyomitch писал(а): Меня терзают смутные сомнения..

Да. Регистрация в реестре происходит при обращении к компоненте
Есть ли у меня вопрос? У меня всегда есть вопрос

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 17.11.2004 (Ср) 15:20

tyomitch писал(а):
Eugenio писал(а):
Код: Выделить всё
   
ЗагрузитьВнешнююКомпоненту("AddInA.dll")
ExtObject = СоздатьОбъект("AddIn.Object2");
ExtObject.ShowMessageBox("O!");

"Меня терзают смутные сомненья..." (с)
Неужели 1С может подключать компоненты только по имени файла, а не по CLSID, как все нормальные COM-клиенты?


у бойцов 1С свой свзгляд на COM
вполне возможно что из за строчки
Код: Выделить всё
ЗагрузитьВнешнююКомпоненту("AddInA.dll")
ничего не выйдет .

Тогда как вариант пользовать Log в файл.

По уму надо в референсах подключить tlb (от 1С) а проекте реализовать пару интерфейсов .

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 15:35

codemaster писал(а):он должен быть MultiUse

Да, я ж не сказал. Это не класс - а UserDocument (я его встраиваю в окошко в 1С).
А это имеет значение для отладки?
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 17.11.2004 (Ср) 15:38

codemaster писал(а):По уму надо в референсах подключить tlb (от 1С) а проекте реализовать пару интерфейсов .

Дак это обязательное условие! Они и реализованы.
И в функциях этих-то интерфейсов я и ставлю бряки.
Есть ли у меня вопрос? У меня всегда есть вопрос

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.11.2004 (Ср) 16:51

Eugenio писал(а):
tyomitch писал(а): Меня терзают смутные сомнения..

Да. Регистрация в реестре происходит при обращении к компоненте

А зачем тебе регистрация в реестре?

Попробуй просто выкинуть эту строчку. Тогда должно обращаться к отладчику VB, а не к файлу.
Изображение

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 18.11.2004 (Чт) 10:56

tyomitch писал(а):А зачем тебе регистрация в реестре?

Попробуй просто выкинуть эту строчку. Тогда должно обращаться к отладчику VB, а не к файлу.

Дело в том, что без этой строчки (Загрузить..) как раз требуется регистрация в реестре заранее: тогда можно не указывать файл
Я хотел компоненту не регать - чтобы облегчить перенос файла: бросил где-ндь в каталоге 1С и всё.. Т.е., эта регистрация при обращении из 1С - это не цель, это так себя ActiveX ведет, видимо.

:?: А какой вообще механизм у VB отслеживания создаваемых клиентами объектов (связи между отлаживаем проектом и вызываемым клиентами модулем) - как он активизирует отладчик, когда кто-то юзает собранную dll?
Последний раз редактировалось Eugenio 18.11.2004 (Чт) 11:22, всего редактировалось 1 раз.
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 18.11.2004 (Чт) 11:21

Что-то тут не то, Мегачелы.
Выкинул строчку, удалил специфичные интерфейсы, зарегал документ regsvr32.
В 1С теперь код:
Код: Выделить всё
ExtObject = CreateObject("AddIn.Object2")


Опять все работает - но к отладчику не обращается!
Правда, ошибку я уже нашел и так :)
Но интересно все-таки, чем эта ... 1С отличается от прочих возможных клиентов. В предыдущем посте вопрос сформулирован - не скажет ли кто чего (насчет механизма VB)?
Есть ли у меня вопрос? У меня всегда есть вопрос

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.11.2004 (Чт) 11:28

Eugenio писал(а):
tyomitch писал(а):А зачем тебе регистрация в реестре?

Попробуй просто выкинуть эту строчку. Тогда должно обращаться к отладчику VB, а не к файлу.

Дело в том, что без этой строчки (Загрузить..) как раз требуется регистрация в реестре заранее: тогда можно не указывать файл
Я хотел компоненту не регать - чтобы облегчить перенос файла: бросил где-ндь в каталоге 1С и всё.. Т.е., эта регистрация при обращении из 1С - это не цель, это так себя ActiveX ведет, видимо.

:?: А какой вообще механизм у VB отслеживания создаваемых клиентами объектов (связи между отлаживаем проектом и вызываемым клиентами модулем) - как он активизирует отладчик, когда кто-то юзает собранную dll?

Он прописывает в реестре на место твоего компонента временную "заглушку", и отслеживает обращения к этой "заглушке".
Твой код, очевидно, эту информацию в реестре перезаписывает, и до VB управление не доходит.
То же самое и с regsvr32: если ты зарегистрируешь компонент после того, как нажал F5 в отладчике - информация перезапишется, и до VB управление не дойдёт.
Попробуй ещё раз запустить компонент из-под отладчика, не регистрируя его нигде руками; должно заработать :-)
Изображение

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 7

    TopList