我在将我的 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/