События в DLL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

События в DLL

Сообщение drronnie » 29.01.2006 (Вс) 14:24

Госопда есть ДЛЛка которая имеет класс. В классе в процедуре Load включается таймер (SetTimer) и ему как процедура по AddressOf передаётся указатель на процедуру которая живёт в обычном модуле (передать указатель на процедуру из класса не полусается) в таймере при некоторых условиях должно возникать событие.
Вопрос как из простого модуля при помощи RaiseEvent сгенерировать событие модуля класса?
Компиляция - перевод словесного поноса в машинный код.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 29.01.2006 (Вс) 14:29

Не проверял, предположение.

Код: Выделить всё
Public Event test()
Public Event test2()

Public Sub RaiseClassEvent(index As Long)
Select Case index
    Case 0:
        RaiseEvent test
    Case 1:
        RaiseEvent test2
End Select
End Sub


Код: Выделить всё
Sub main()
Dim x As Class1
Set x = New Class1

x.RaiseClassEvent 0
End Sub
Последний раз редактировалось Amed 01.02.2006 (Ср) 0:17, всего редактировалось 1 раз.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: События в DLL

Сообщение ANDLL » 29.01.2006 (Вс) 15:30

drronnie писал(а):Вопрос как из простого модуля при помощи RaiseEvent сгенерировать событие модуля класса?

Никак, разумеется. Что за глупость?
События они на то и события что бы генерироваться ВНУТРИ класса. Ну разве что то что Amed написал... Но это просто переливание из пустого в порожнее.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.01.2006 (Пн) 10:24

Никак, разумеется? Что за глупость.
Код: Выделить всё
module1:
public lClass1 as Class1

sub TimerCallback()
    lClass1.FireEvent()
end sub

Код: Выделить всё
class1:

public event Event1()

private sub Class_Initialize()
    Set lClass1 = Me
end sub

friend sub FireEvent()
    raiseevent Event1()
end sub
Лучший способ понять что-то самому — объяснить это другому.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.01.2006 (Пн) 10:32

И в чём отличие от кода Amed'а?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 30.01.2006 (Пн) 11:04

1. В том, что у него экземпляр почему-то создается внутри коллбэка (если sub main это коллбэк), и кто же будет ловить событие?
2. У него Public Sub RaiseClassEvent, а нужно Friend, чтобы снаружи за него не дергали.
Лучший способ понять что-то самому — объяснить это другому.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 31.01.2006 (Вт) 14:54

Спасибо.... Я так понял, что лучше через SendMessage сообщения кидать... вместо событий
Компиляция - перевод словесного поноса в машинный код.


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

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

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

    TopList