Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: в VB 6 - any, а в ДотНете что ? Добавлено: 09.09.05 21:55  

Автор вопроса:  student-uni
Вот так в ВБ 6 задекларированы ф-ции:

Private Declare Function GetAdaptersInfo Lib "IPHLPAPI.dll" (ByRef pAdapterInfo As Any, ByRef pOutBufLen As Long) As Long

Private Declare Sub CopyMemoryRR Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private Declare Sub CopyMemoryRV Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByVal Source As Any, ByVal Length As Long)

А как в ДотНете ?

С ГетАдаптерИнфо я вроде выкрутился:

Private Declare Function GetAdaptersInfo Lib "IPHLPAPI.dll" (ByRef pAdapterInfo As IP_ADAPTER_INFO, ByRef pOutBufLen As Integer) As Integer

ибо сказано в МСДН, что первый аргумент - должен быть указатель на структуру типа IP_ADAPTER_INFO, хотя я не уверен что правильно сделал.

Помогите с Копи Мемори.

В оригинале на ВБ 6 ей даются во второй аргумент - ЛОНГ
а в первый один раз IP_ADAPTER_INFO а один раз IP_ADDR_STRING,

и вот как объявить в дот нете, чтобы разные структуры совать на вход можно было я ума не приложу.

Помогите пожалуйста.

Всем спасибо

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 K&M



ICQ: 225442067 

Вопросов: 20
Ответов: 170
 Профиль | | #1 Добавлено: 11.09.05 12:56
В оригинале на ВБ 6 ей даются во второй аргумент - ЛОНГ


мало чем тебе к сожалению могу помочь лишь на будущее, чтоб не попался: в объявлениях апи на вб6 в нете заменяй Long на Integer т.к. в вб6 LONG - 4B, Integer - 2B, а в нете Integer - 4B,Long - 8B

Ответить

Номер ответа: 2
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #2
Добавлено: 25.02.06 23:12
SendMessage например
vb6
lparam as any
vbnet
byref lparam as long, string, даже point может быть.

Ответить

Номер ответа: 3
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 26.02.06 01:17
ну никак уж не ByRef! ByVal обязалово!

Ответить

Номер ответа: 4
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #4
Добавлено: 26.02.06 22:36
SNE может ты прав, но у меня в API Viewer для vb6 написано:

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 26.02.06 23:45
потому что это декларация для VB6... где при вызове можно явно указать:

Call SendMessage(Me.hwnd, WM_NULL, 0, byval 0)

И это будет работать. Сделано для универсальности декларации, дабы не создавать несколько псевдонимов функции с разным типом параметров.

Ответить

Номер ответа: 6
Автор ответа:
 SerJ



Вопросов: 24
Ответов: 332
 Профиль | | #6 Добавлено: 27.02.06 15:02
ЗЫ. А что делает ByVal, и что ByRef?

Ответить

Номер ответа: 7
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #7
Добавлено: 27.02.06 18:21
byval по значению
byref по ссылке

Ответить

Номер ответа: 8
Автор ответа:
 SerJ



Вопросов: 24
Ответов: 332
 Профиль | | #8 Добавлено: 27.02.06 18:41
да это логично из названия:
by Value
by Reference
Меня интересует - как это осуществляется - по значению и по ссылке? А если ничего не ставить, то по умолчанию будет "по значению"?

Ответить

Номер ответа: 9
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 27.02.06 21:24
в 6-ом по ссылке, а точке по значению кажися...

Ответить

Номер ответа: 10
Автор ответа:
 mich



ICQ: 261800349 

Вопросов: 19
Ответов: 148
 Web-сайт: belkyokushin.net
 Профиль | | #10
Добавлено: 28.02.06 13:31
Меня интересует - как это осуществляется - по значению и по ссылке? А если ничего не ставить, то по умолчанию будет "по значению"?


vb.net сама ставит ByVal

пример как работает ByRef:

    Sub cmd_click()
        Dim a As Integer = 0
        Dim b As Integer = 0
        SampleSub(a, b)
        SampleSub(a, b)
        SampleSub(a, b)

        MsgBox(a) ' ВЫДАСТ 30
        MsgBox(b) ' ВЫДАСТ 0
    End Sub

    Sub SampleSub(ByRef a As Integer, ByVal b As Integer)
        a += 10
        b += 10
    End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам