为 AddressOf 运算符添加委托-.NET中的函数指针

转自MSDN。

在 Visual Basic 6.0 中,AddressOf 运算符用于将函数在内存中的地址传递给将函数指针用作参数的 API 过程。
在 Visual Basic .NET 中,AddressOf 运算符必须与 Delegate 类型一起使用。委托允许 Visual Basic .NET 保持一个指向函数的指针(即使已对该函数本身进行了垃圾回收)。
下面的示例阐释如何升级使用 AddressOf 的回调函数:
' Visual Basic 6.0
Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal attr As Long, ByVal lVal As Long) As Long
Sub SubClassWindow(ByVal hwnd As Long)
   If PrevProcPtr = 0 Then
      PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
   End If
End Sub

' After upgrade to Visual Basic .NET
Declare Function SetWindowLong Lib "USER32.DLL"  Alias "SetWindowLongA"(ByVal hwnd As Integer, ByVal attr As Integer, ByVal lVal As Integer) As Integer
Sub SubClassWindow(ByVal hwnd As Integer)
   If PrevProcPtr = 0 Then
      ' UPGRADE_WARNING: Add a delegate for AddressOf SubClassProc.
      PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
   End If
End Sub
下一步做什么
为 AddressOf 运算符添加一个委托,将函数声明的参数更改为 Delegate 类型:
Delegate Function SubClassProcDelegate(ByVal hwnd As Integer, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Declare Function SetWindowLong Lib "USER32.DLL" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal attr As Integer, ByVal lVal As SubClassProcDelegate) As Integer
Sub SubClassWindow(ByVal hwnd As Integer)
   If PrevProcPtr = 0 Then
      PrevProcPtr = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubClassProc)
   End If
End Sub
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值