Соответствие vbObjectError между VB NET и VB6

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

Соответствие vbObjectError между VB NET и VB6

Сообщение ozyabkin » 02.02.2025 (Вс) 21:50

Добрый день.
КАК ПОЛУЧИТЬ ДЕЙСТВИТЕЛЬНЫЙ НОМЕР ОШИБКИ при выполнении команды в динамической бибилиотеке MsgBox(Err.Number - vbObjectError), если VB NET команда MsgBox отображает код ошибки верный код ошибки 103, а в VB6 - код ошибки 988416.
Например, создана динамическая библиотека dsaLib с модулем класса clsDSA. Библиотека поддерживает регистрацию для COM-взаимодействия, т.е. при компиляции создаются два файла dsaLib.dll и dsaLib.tlb.
Допустим, что в VB NET в теле функции LoadData класса clsDSA при обработке исходных данных генерируется ошибка.
Код: Выделить всё
Err.Raise(vbObjectError + 103, "dsaLib\clsDSA\LoadData", "Не соответствие размеров x и y")

В VB6 имеется вызов функции, например чтения данных
Код: Выделить всё
Sub Main
Dim x() as Double, y() as Double
Dim dsa As New dsaLib

On Error Goto 1
call dsa.LoadData(App.path & "data.dat", x, y)
Exit Sub

1: MsgBox Err.Number & ": " & Err.Description
End Sub

При компиляции и выполнении алгоритма функция MsgBox отображает номер ошибки 988416 независимо от генерируемой ошибки в динамической библиотеке. Т.е. задавая номер ошибки от vbObjectError + 1 до vbObjectError + 500, при выполнении программы в VB6 всегда выдаёт ошибку 988416.

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

Re: Соответствие vbObjectError между VB NET и VB6

Сообщение ozyabkin » 04.02.2025 (Вт) 18:31

Нашёл ответ:
Код: Выделить всё
Public Shared Function BISACDF(ByVal X As Double, ByVal BETA As Double, ByVal GAMMA As Double) As Double
            Try
                If BETA <= 0 Then
                    Throw New COMException(GetString("C336"), vbObjectError + 336)
                ElseIf GAMMA <= 0 Then
                    Throw New COMException(GetString("C337"), vbObjectError + 337)
                ElseIf X < 0 Then
                    Return 0
                Else
                    Dim Z As Double = (Sqrt(X / BETA) - Sqrt(BETA / X)) / GAMMA
                    Return 0.5 * erfc(-Z / Sqrt(2))
                End If
            Catch
                Throw New COMException(Err.Description, Err.Number)
            End Try
        End Function


Функция работает отлично, жалко только, что не передаёт инфомации о том, в каком месте произошла ошибка...


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

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

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

    TopList