Виктор Путевской
Работа с памятью и указателями в VB.NET
http://www.vbstreets.ru/VBdotNET/Articles/66311.aspx
Как уже было сказано, оператор AddressOf теперь создает делегат, вместо возможности получить адрес функции. Казалось бы, какая разница как объявлять функцию API? Вместо IntPtr записываем делегат соответствующего типа и все замечательно. К сожалению, вполне может сложиться такая ситуация, когда вам необходим реальный указатель на функцию. Это возможно, например, при вызове функции, которая обеспечивает Callback вызовы при некоторых условиях. То есть у вас есть параметр, который при одних условиях может быть указателем на функцию, а при других чем-то другим. Одним словом этот параметр всегда целое число и перегрузка здесь, к сожалению, не поможет.
Module Module1
Private Delegate Function MyCallback(ByVal p1 As Integer, ByVal p2 As Integer) As Integer
Private Declare Function foo Lib "foolib" (ByVal p1 As Integer, ByVal callback As MyCallback) As Integer
Private Declare Function foo Lib "foolib" (ByVal p1 As Integer, ByVal callback As Integer) As Integer
Sub Main()
foo(1, AddressOf Callback)
foo(1, 2)
End Sub
Function Callback(ByVal p1 As Integer, ByVal p2 As Integer) As Integer
Return p1 + p2
End Function
End Module
gaidar писал(а):GSerg, скажи, как ты бы отличил чисто типа Int от указателя на функцию?
gaidar писал(а):GSerg, скажи, как ты бы отличил чисто типа Int от указателя на функцию?
hCORe писал(а):Может, поправить в тексте "описателей" на "дескрипторы" (хэндлы, идентификаторы, ...?)
А то название непривычное.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3