Плагин для Download Master

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

Сообщение Qwertiy » 23.12.2012 (Вс) 11:06

Хакер писал(а):Радуйся:

Спасибо!
Вроде даже разобрался как это работает. Кроме того, почему возвращаемое значение превращается в код ошибки...

ger_kar писал(а):А как же тогда Implements IDMPlugIn?

Оно не требуется, т. к. DM получает вообще фальшивую таблицу функций.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 11:15

Qwertiy писал(а):Кроме того, почему возвращаемое значение превращается в код ошибки...

Это вопрос или что? Да и где оно превращается? По-моему наоборот?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 11:22

Хакер писал(а):
Qwertiy писал(а):Кроме того, почему возвращаемое значение превращается в код ошибки...

Это вопрос или что? Да и где оно превращается? По-моему наоборот?

Да, это вопрос. Я имел в виду, такой код:
Код: Выделить всё
    On Error Resume Next
    retval = this.RealInterface.Identifier
    wrapper_Identifier = Err.Number
Т. е. мы выполняем нужную функцию, а потом возвращаем код ошибки.

А, кажется понял. Члены класса как раз и должны возвращать код ошибки.
А что произошло бы, если бы мы просто вызвали функцию, без On Error, ну и без возврата кода соответственно?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 11:38

Qwertiy писал(а):Т. е. мы выполняем нужную функцию, а потом возвращаем код ошибки.
А, кажется понял. Члены класса как раз и должны возвращать код ошибки.

В COM реальным возвращаемым значением является HRESULT, а то возващаемое значение, с которым стакливается ВУ-программист, возвращается через последний аргумент.

Qwertiy писал(а):А что произошло бы, если бы мы просто вызвали функцию, без On Error, ну и без возврата кода соответственно?

На уровне классов в VB для передачи информации об ошибках используется HRESULT и IErrorInfo.
На уровне обычных модулей используется генераций исключений и их обработка.

Если бы мы не обрамили вызов оригинального метода с помощью OnError/Err.number, то сгенерировалось бы исключение, которое ушло бы в вызывающую сторону (Download Master). Может быть он (DM) бы обработал его и ругнулся, может быть он не обработал его, и программа бы «упала» совсем.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 11:41

Спасибо :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 11:49

Вообще, можно придумать гораздо более красивое в техническим плане решение, чем то, что я запостил. То, что я выложил, это просто абсолютный минимальный уровень, необходимый для решения проблемы.

Во-первых, у меня есть недоделанный кирпич, который позволяет автоматически на лету генерировать функции-переходничики, просто описывая схему «перехода». Очень удобная штука, например, для перехода много callbackов → один callback с параметром (и наоборот), в частности, для реализации сабклассинга форм с размещением WindowProc-а в самой форме.
Но это киприч так и не доделан.

Второй вариант заключается в том, чтобы применить мой кирпич «вызов по указателю». Не создавать fake-интерфейс, не создавать fake-vtable. А просто попробвить несколько (даже не все!) элементов оригинальной vtable оригинального IDMInterface, перенаправив указатели на методы в извращённым порядокм аргументов на корректирующие переходники.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 16:37

А как из него показать форму?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 16:38

Как обычно, но надо полагать, у тебя оно падает :) ?
(Не форму, а экземпляр формы!)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 16:43

Хакер писал(а):Как обычно, но надо полагать, у тебя оно падает :) ?

Видимо, да...

Хакер писал(а):(Не форму, а экземпляр формы!)

Я это и имел в виду.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Плагин для Download Master

Сообщение ger_kar » 23.12.2012 (Вс) 16:44

А что вообще плагин должен делать, в смысле его функционала? Это не по поводу формы конечно, а просто стало интересно, что же это за плагин :)
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 16:48

Qwertiy писал(а):Видимо, да...

Ага, добавил вывод информации об ошибке:
Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control or Property Page.

UPDATE: Да, если показывать модально, то не падает.
Последний раз редактировалось Qwertiy 23.12.2012 (Вс) 16:55, всего редактировалось 1 раз.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 16:50

ger_kar писал(а):А что вообще плагин должен делать, в смысле его функционала? Это не по поводу формы конечно, а просто стало интересно, что же это за плагин :)

Да разные идеи есть. Пока пытаюсь сделать, чтобы работал, а там по мере надобности буду делать :)

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Плагин для Download Master

Сообщение ger_kar » 23.12.2012 (Вс) 17:06

А какой вообще дополнительный функционал DM возможно реализовать посредством плагина? Это же от самого приложения DM зависит или нет? Сам я DM никогда не пользовался (юзаю ReGet), но видел DM на компах клиентов, и надо сказать на них он довольно распространен. А тут мне стало интересно, плагины, необычный функционал и все такое :). Тот пример с интерфейсом по сути просто предоставляет информацию. А другой функционал каким вообще образом организуется? И как он (посредством чего) должен взаимодействовать с DM? Только через такой интерфейс?
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Плагин для Download Master

Сообщение ger_kar » 23.12.2012 (Вс) 17:16

Qwertiy писал(а):Ага, добавил вывод информации об ошибке:Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control or Property Page.UPDATE: Да, если показывать модально, то не падает.
Интересно кто генерирует эту ошибку VB'шный плагин или сам DM. И почему вдруг ActiveX DLL, ActiveX Control or Property Page не могут показывать не модальные окна. Может потому, что модальные окна имеют свою отдельную оконную функцию и сами обрабатывают сообщения, а не модальные надеются на само приложение?
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 17:21

ger_kar писал(а):А какой вообще дополнительный функционал DM возможно реализовать посредством плагина? Это же от самого приложения DM зависит или нет?

Ну естественно зависит. Они взаимодействуют через xml в строковых переменных (команды и данные). Отображение данных по закачкам, управление закачками, в т. ч. добавление и удаление и куча всего.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 17:23

ger_kar писал(а):Интересно кто генерирует эту ошибку VB'шный плагин или сам DM.

Плагин. Потому что я её так вывел:
Код: Выделить всё
Private Function wrapper_EventRaised(ByRef retval As String, ByRef this As IDMPlugIn_interface_emulator, ByVal sEventType As String, ByVal sEventData As String) As Long
    On Error Resume Next
    retval = this.RealInterface.EventRaised(sEventType, sEventData)
    wrapper_EventRaised = Err.Number
    MsgBox Err.Description
End Function

ger_kar писал(а):Может потому, что модальные окна имеют свою отдельную оконную функцию и сами обрабатывают сообщения, а не модальные надеются на само приложение?

Не понял.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 17:27

ger_kar писал(а):Может потому, что модальные окна имеют свою отдельную оконную функцию и сами обрабатывают сообщения, а не модальные надеются на само приложение?

Бредятина.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Плагин для Download Master

Сообщение ger_kar » 23.12.2012 (Вс) 17:34

Ну а другая причина, почему модальные можно, а не модальные нельзя?
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 17:39

ger_kar писал(а):почему модальные можно, а не модальные нельзя?

На Делфи такой проблемы нет, если не ошибаюсь. По крайней мере, плагин с немодальным (но user-transparent) окном точно есть...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 17:44

ger_kar писал(а):Ну а другая причина, почему модальные можно, а не модальные нельзя?

Конечно.
Та же причина, по которой Can't show non-modal form when modal form is opened.

Да и некорректно говорить «другая причина». То, что ты написал, просто глупость, не имеющая никакой связи с реальностью. Чтобы говорить «другая причина», надо иметь две правдоподобные версии.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 17:46

Так что всё-таки надо сделать, чтобы показть немодальную форму?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 18:03

Qwertiy писал(а):Так что всё-таки надо сделать, чтобы показть немодальную форму?

Радикальный вариант — переместить класс CTestPlugin в ActiveX EXE, оставив всё остальное внутри Standard DLL.
Вообще, конечно, система плагинов в DM просто дегенератская.

Опиши, что ты хочешь показывать внутри экземпляра формы, показанного немодально. Может быть есть в принципе другое решение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Плагин для Download Master

Сообщение ger_kar » 23.12.2012 (Вс) 18:06

А причина по которой ActiveX.Dll не может рожать не модальные окна, так и не ясна?
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 18:23

ger_kar писал(а):А причина по которой ActiveX.Dll не может рожать не модальные окна, так и не ясна?

Техническая или идеологическая?
Технической нет (пока крайней мере я не вижу).
Идеологическая — та же, что и в случае Can't show non-modal form when modal form is shown.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 18:36

Хакер писал(а):Опиши, что ты хочешь показывать внутри экземпляра формы, показанного немодально. Может быть есть в принципе другое решение.

Конкретно в данный момент я попытался вывести лог событий.
А вообще, что-то такое. Там был мой пример формы на VB.NET, но с тех пор, как они отключили вложения на форуме, до него не доберёшься. Надо поискать, если найду, выложу.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 18:51

Хакер писал(а):Вообще, конечно, система плагинов в DM просто дегенератская.

Почему? А как обычно плагины делают?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 19:00

Qwertiy писал(а):Надо поискать, если найду, выложу.

Вот, нашёл.

DM DownloadsList.7z
VS2005 Solution
(34.58 Кб) Скачиваний: 153

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16474
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Плагин для Download Master

Сообщение Хакер » 23.12.2012 (Вс) 19:32

Qwertiy писал(а):Почему? А как обычно плагины делают?

Много как делают. Это обсуждение для отдельного топика. И вот здесь мы видим невероятное количество кривости, начиная от того, что провозглашенные COM-интерфейсами интерфейсы оказались вовсе не COM-интерфейсами, и заканчивая маразматической семантикой вызовов, передачи параметров.

Qwertiy писал(а):Вот, нашёл.

Давай словами. Всё равно у меня не установлено VS2005.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 23.12.2012 (Вс) 19:35

Хакер писал(а):Давай словами. Всё равно у меня не установлено VS2005.

Словами есть по ссылке. А вообще, там exe-файл есть - запусти. .NET 2 у тебя ведь стоит?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.12.2012 (Пн) 2:50

Ну так что?

Пред.След.

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

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

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

    TopList