vb.net - "addressof "VB6 到 VB.NET

标签 vb.net callback vb6 address-operator

我在将我的 VB6 项目转换为 VB.NET 时遇到了一些问题

我不明白这个“AddressOf”函数在 VB.NET 中应该如何

我的 VB6 代码:

Declare Function MP4_ClientStart Lib "hikclient.dll" _
  (pClientinfo As CLIENT_VIDEOINFO, ByVal abab As Long) As Long

Public Sub ReadDataCallBack(ByVal nPort As Long, pPacketBuffer As Byte, _
  ByVal nPacketSize As Long)

  If Not bSaved_DVS Then
    bSaved_DVS = True
    HW_OpenStream hChannelHandle, pPacketBuffer, nPacketSize
  End If
    HW_InputData hChannelHandle, pPacketBuffer, nPacketSize

End Sub

nn1 = MP4_ClientStart(clientinfo, AddressOf ReadDataCallBack)

最佳答案

您可能会看到此错误:

'AddressOf' expression cannot be converted to 'Long' because 'Long' is not a delegate type.



您可能想要做的是创建一个委托(delegate),然后将 adab 的类型更改为该委托(delegate)类型。将此添加到类中:
Public Delegate Sub ReadDataCallBackDelegate(ByVal nPort As Long, _
  ByVal pPacketBuffer As Byte, ByVal nPacketSize As Long)

然后将您的 P/Invoke 声明更改为:
Declare Function MP4_ClientStart Lib "hikclient.dll" (ByVal pClientinfo As _
  CLIENT_VIDEOINFO, ByVal abab As ReadDataCallBackDelegate) As Long

不要删除/更改您的 ReadDataCallBack Sub,您仍然需要它。

那时他的编译器应该很高兴。但是,其他人提出的观点很重要。 Integers 和 Longs 的长度在 VB6 中与在 VB.NET 中不同。因此,在 .NET 中,您需要在 VB6 中使用 Long 时使用 Integer。

关于vb.net - "addressof "VB6 到 VB.NET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463395/

相关文章:

asp.net - 动态添加控件到面板 - 布局问题

c# - 来自主项目的引用命名空间

jquery - 如何慢慢淡出div,更新内容,然后慢慢淡入div,使用jQuery?

image - VB6 - 加载/存储稍后使用的图像

html css 菜单可见性按权限隐藏

VB.Net BufferedGraphics透明背景

vb6 - SendKeys "^f"无法与其他快捷键一起使用

ms-access - 使用 VB6 检查 MS Access 数据库 key

javascript - 使用 Google Closure Compiler 记录回调参数

objective-c - 记住 performSelector : for later in Objective-C