Применение AddressOf

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

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

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Применение AddressOf

Сообщение NIC » 20.02.2008 (Ср) 14:58

Собственно,не получаеться использовать AddressOf.
Попробовал посмотреть в справке,мало что понялось.Особенно с термином Delegate.

В частности проблема при использовании названного оператора,в примере установки "своего" обработчика window message.

Код: Выделить всё


Module Module1

    Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Int32, ByVal nIndex As Int32, ByVal dwNewLong As Int32) As Int32
    Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Int32, ByVal hwnd As Int32, ByVal msg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32


    Private Const GWL_WNDPROC As Int32 = (-4)
    Public sc_Hwnd As Int32


    Public Sub SetLong(ByVal hwnd As Int32)
        sc_Hwnd = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub

    Public Sub RestoreLong(ByVal hwnd As Int32)
        SetWindowLong(hwnd, GWL_WNDPROC, sc_Hwnd)
    End Sub

    'Обработчик
    Public Function WindowProc(ByVal hwnd As Int32, ByVal iMsg As Int32, ByVal wParam As Int32, ByVal lParam As Int32) As Int32
        WindowProc = CallWindowProc(sc_Hwnd, hwnd, iMsg, wParam, lParam)
    End Function

End Module


Ругаеться на AddressOf. :roll:

Visual Basic писал(а):AddressOf' expression cannot be converted to 'Integer' because 'Integer' is not a delegate type.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 20.02.2008 (Ср) 23:36

Правильно ругается. Посмотри, что возвращает AddressOf
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 21.02.2008 (Чт) 8:38

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

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 21.02.2008 (Чт) 9:02

заглянуть в описание функции addressOf
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 21.02.2008 (Чт) 9:56

А можно пример использования AddressOf?(без создания ивентов).
Фактически,мне нужно получить выражение типа Int32 содержащее адрес этого участка памяти.

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 21.02.2008 (Чт) 10:22

Вот здесь описан сабклассинг.
http://www.p-lib.pp.ru/articles/article ... iew&ID=271

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 21.02.2008 (Чт) 19:10

NIC, если бы ты прочел статью по этой ссылке, то ты бы понял, что AddressOf в данном случае без надобности. Просто переопредели процедуру WndProc.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 21.02.2008 (Чт) 20:28

Nord777,я сначала в форум написал,а потом статью нашёл и прочёл.

Ну,по крайней мере,будет топик,для поиска по ключевому слову "сабклассинг". :wink:


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

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

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

    TopList