gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:07:07 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com