powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А объясните мне: одно и то же в VB6 и .Net по разному считается
4 сообщений из 4, страница 1 из 1
А объясните мне: одно и то же в VB6 и .Net по разному считается
    #38788782
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первоисточник был вырван из C++
Код: plaintext
1.
2.
3.
4.
void Manager::SetRtpIpPorts(unsigned rtpIpBase, unsigned rtpIpMax)
{
  rtpIpPorts.Set(rtpIpBase&0xfffe, rtpIpMax&0xfffe, 198, 5000);
...



Некогда переписал на VB6
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub SetRtpIpPorts(ByRef rtpIpBase As Long, ByRef rtpIpMax As Long)
  Dim m_Base As Long
  Dim m_Max As Long
  m_Base = rtpIpBase And &HFFFE
  m_Max = rtpIpMax And &HFFFE
  
  SetPorts m_Base, m_Max, 198, 5000
...



Смысл этого "And &HFFFE" так понял приводить нечетное число к четному на единицу меньше.
5998->5998
5999->5998

Ну по крайне мере я добился того что ф-ции в VB6 и C++ давали одинаковый результат

Счас с VB6 перекатываю на .Net:
Код: vbnet
1.
2.
3.
4.
5.
 Public Sub SetRtpIpPorts(ByRef rtpIpBase As Integer, ByRef rtpIpMax As Integer)
    Dim m_Base As Integer = rtpIpBase And &HFFFE
    Dim m_Max As Integer = rtpIpMax And &HFFFE

    SetPorts(m_Base, m_Max, 198, 5000)


И это сглючило на больших числах.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
В VB6:
debug.print (&HFFFE)
-2 
debug.print (99999 And &HFFFE)
99998 

В .Net
Debug.Print(&HFFFE)
65534
Debug.Print(99999 AND &HFFFE) '
34462



Я сделал так (подтасовал результат как мне нужен):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
vb.net
  Public Sub SetRtpIpPorts(ByRef rtpIpBase As Integer, ByRef rtpIpMax As Integer)
    Dim m_Base As Integer = rtpIpBase And -2 'And &HFFFE
    Dim m_Max As Integer = rtpIpMax And -2 'And &HFFFE

    SetPorts(m_Base, m_Max, 198, 5000)
...

Debug.Print(99999 AND -2)
99998



Но если честно смысл сделанного не догоняю.
М.б. кто прояснит для понимания.
...
Рейтинг: 0 / 0
А объясните мне: одно и то же в VB6 и .Net по разному считается
    #38788846
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
99999 - невалидно для для порта - это всё таки 16 битное беззнаковое
...
Рейтинг: 0 / 0
А объясните мне: одно и то же в VB6 и .Net по разному считается
    #38788876
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил99999 - невалидно для для порта...
Это я в курсе.
Вторая ф-ция это объясняет:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 '================коррекция диапазона RTP портов=========================

  Public Sub SetRtpIpPorts(ByRef rtpIpBase As Integer, ByRef rtpIpMax As Integer)
    Dim m_Base As Integer = rtpIpBase And -2 'And &HFFFE (в VB6)
    Dim m_Max As Integer = rtpIpMax And -2 'And &HFFFE (в VB6)

    SetPorts(m_Base, m_Max, 198, 5000)
    rtpIpBase = m_Base
    rtpIpMax = m_Max
  End Sub

  Private Sub SetPorts(ByRef newBase As Integer, ByRef newMax As Integer, _
   ByVal range As Integer, ByVal dflt As Integer)
    If newBase = 0 Then
      newBase = dflt
      newMax = dflt
      If dflt > 0 Then newMax = newMax + range
    Else
      If newBase < 1024 Then
        newBase = 1024
      ElseIf newBase > 65500 Then
        newBase = 65500
      End If

      If newMax <= newBase Then newMax = newBase + range
      If newMax > 65530 Then newMax = 65530
    End If
  End Sub

  '================коррекция диапазона RTP портов=========================



Смысл моих дублирующих ф-ций в том, что они делают то же самое что и C++ система.
Т.е. пользователь ввел в настройки 2 порта, max и min,
мои ф-ции (VB6 или .Net не суть) их скорректировали.
Смысл в том, чтоб C++ эти скорректированные значения больше не меняла (т.е. реально устанавливаемый диапазон не плавал относительно заданного и отображаемого в настройках).
...
Рейтинг: 0 / 0
А объясните мне: одно и то же в VB6 и .Net по разному считается
    #38788915
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ф-ция достаточно коварная (насчет чет-нечет).
Надо еще чтобы скорректированный диапазон не уезжал.
В C++ был баг, т.е. задаешь напр.
5000-5999
он делает
5000-5997
потом
5000-5995
Нажал 100 раз на Apply -и имеем
5000-5795
Но счас вроде нормально пофиксено - корректируется в "одну итерацию".
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А объясните мне: одно и то же в VB6 и .Net по разному считается
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]