Страница: 1 |
Страница: 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 в нете заменяй Long на Integer т.к. в вб6 LONG - 4B, Integer - 2B, а в нете Integer - 4B,Long - 8B
Номер ответа: 2
Автор ответа: mich
ICQ: 261800349
Вопросов: 19
Ответов: 148
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #3
Добавлено: 26.02.06 01:17
ну никак уж не ByRef! ByVal обязалово!
Номер ответа: 4
Автор ответа: mich
ICQ: 261800349
Вопросов: 19
Ответов: 148
Web-сайт:
Профиль | | #4
Добавлено: 26.02.06 22:36
SNE может ты прав, но у меня в API Viewer для vb6 написано:
Номер ответа: 5
Автор ответа: sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #9
Добавлено: 27.02.06 21:24
в 6-ом по ссылке, а точке по значению кажися...
Номер ответа: 10
Автор ответа: mich
ICQ: 261800349
Вопросов: 19
Ответов: 148
Web-сайт:
Профиль | | #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 ' ВЫДАСТ 30
MsgBox(b) ' ВЫДАСТ 0
End Sub
Sub SampleSub(ByRef a As Integer, ByVal b As Integer)
a += 10
b += 10
End Sub