Обработка событий в DLL на VB NET 2003

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ozyabkin
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 16.11.2005 (Ср) 0:02

Обработка событий в DLL на VB NET 2003

Сообщение ozyabkin » 23.12.2005 (Пт) 3:21

Добрые люди!!!!!!!!!!!
Помогите!!!!!!!!!!!!!!!!!!

Не могу вызвать событие COM объекта (DLL-ки) в пользовательское приложение через функцию WithEvents.
Код: Выделить всё
Public Delegate Sub INVARMAORDEREventHandler(ByRef ORDERNUM() As Integer, ByRef ORDERDEN() As Integer, ByRef RESIDUALDISPERSION(,) As Double, ByRef IQ As Integer, ByRef IP As Integer)

<ComClass(clsDSA.ClassId, clsDSA.InterfaceId, clsDSA.EventsId), DefaultEvent("INVARMAORDER")> _
Public Class clsDSA

#Region "COM GUIDs"
    Public Const ClassId As String = "3F0CD705-094F-4afc-903D-98E37094C959"
    Public Const InterfaceId As String = "63A26FF1-226F-4f8f-A364-3840C849F439"
    Public Const EventsId As String = "17B0F573-1F3D-4bb2-A5A9-881BE28FF437"
#End Region

#Region "Public"
    Public Sub New()
        MyBase.New()
        AddHandler INVARMAORDER, AddressOf OnChanged
    End Sub

    <ComRegisterFunction()> Public Shared Sub OnRegistration(ByVal T As Type)
        MsgBox("Библиотека " & T.FullName & " зарегистрирована!!!")
    End Sub

    Public Event INVARMAORDER As INVARMAORDEREventHandler
    Protected Overridable Sub OnChanged(ByRef ORDERNUM As Integer(), ByRef ORDERDEN As Integer(), ByRef RESIDUALDISPERSION As Double(,), ByRef IQ As Integer, ByRef IP As Integer)
        RaiseEvent INVARMAORDER(ORDERNUM, ORDERDEN, RESIDUALDISPERSION, IQ, IP)
    End Sub

    Public Sub INVARMA(ByRef H As Complex(), ByRef W As Double(), ByRef IQ As Integer, ByRef IP As Integer, ByRef NUM As Complex(), ByRef DEN As Complex(), Optional ByVal Wt As Object = Nothing, Optional ByVal MaxIter As Integer = 0, Optional ByVal TOL As Double = 0.01, Optional ByVal ComplexFlag As Boolean = False, Optional ByVal ChoiceOrder As Boolean = False)
        ...
        OnChanged(ORDERNUM, ORDERDEN, RD, IQ, IP)
        ...
    End Sub
#End Region
End Class


В приложении на VB6 возникает ошибка о переполнении стека.
Спасибо.
Вложения
TEST.ZIP
Тестовые файлы
(15.05 Кб) Скачиваний: 79

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

Сообщение GSerg » 23.12.2005 (Пт) 6:39

Ну а чё ты хочешь.
Ты бесконечно вызываешь обработчик своего же события.

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

ozyabkin
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 16.11.2005 (Ср) 0:02

Сообщение ozyabkin » 27.12.2005 (Вт) 4:11

А как же быть, если функция OnChanged вызывается только один раз?

Может быть AddHandler INVARMAORDER, AddressOf OnChanged поместить в саму подпрограмму Public Sub INVARMA

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

Сообщение GSerg » 27.12.2005 (Вт) 9:34

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

ozyabkin
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 16.11.2005 (Ср) 0:02

Сообщение ozyabkin » 27.12.2005 (Вт) 23:27

Это событие мне нужно реализовать.
Каким же то образом это должно выполняться в среде NET :?:

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

Сообщение GSerg » 28.12.2005 (Ср) 5:16

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

ozyabkin
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 16.11.2005 (Ср) 0:02

Сообщение ozyabkin » 28.12.2005 (Ср) 23:55

Без строки AddHandler никакого события не происходит, как если бы ссылки RaiseEvent не было.

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

Сообщение GSerg » 29.12.2005 (Чт) 6:40

Оно происходит.
Оно тобой не ловится в VB6.
Потому что с какой стати оно будет ловиться, если класс создан в переменной C, а события ты ловишь у переменной class, которая всегда nothing в твоём коде?

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

ozyabkin
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 16.11.2005 (Ср) 0:02

Сообщение ozyabkin » 31.12.2005 (Сб) 2:11

C VB6 я программирую уже 5 лет, со структурой программирования Event и WithEvent в VB6 я знаком. Пробемы у меня с VB NET!!!

Я пробовал в VB6 изменить переменную class на переменную C. Тогда при обращении к функции библиотеки возникает ошибка 91: Obect variable or With block variable not set. Поэтому с VB6 все в порядке. Проблемы с синтаксисом команд в VB Net.
Информация о VB NET очень скудная. Я уже купил 5 книг. Перепробовал все варианты, описанные в книгах, читал куцую информацию MSDN, других англоязычных сайтов а также книгу сайта http://books-it.narod.ru/aticle/vb .
Но до меня не доходит этот синтаксис команд, когда нужно его связывать командой AddHandler.

Где можно получить пример вызова события из приложения пользователя в VB NET ???

Большое спасибо.

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

Сообщение GSerg » 31.12.2005 (Сб) 6:02

ozyabkin писал(а):Я пробовал в VB6 изменить переменную class на переменную C. Тогда при обращении к функции библиотеки возникает ошибка 91: Obect variable or With block variable not set. Поэтому с VB6 все в порядке. Проблемы с синтаксисом команд в VB Net.

Бред.
Приводишь причину проблемы, а потом говоришь - вот, всё правильно поэтому.

ozyabkin писал(а):Информация о VB NET очень скудная.

http://msdn.microsoft.com/library/rus
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ozyabkin
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 16.11.2005 (Ср) 0:02

Сообщение ozyabkin » 03.01.2006 (Вт) 2:32

Читал, пробовал, не получается !!!!!!!!!!!!!!!!!!!!
Помогите, пожалуйста

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

Сообщение GSerg » 03.01.2006 (Вт) 7:02

Убери AddHandler INVARMAORDER, AddressOf OnChanged в .net.
Сделай обработку события у правильной переменной в vb6, а не у той, у которой сейчас.

Что именно из этих двух пунктов вызывает затруднения у человека, программирующего 5 лет и знакомого с withevents?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList  
cron