[英]“ addressof ” VB6 to VB.NET
我在將 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' 表達式不能轉換為 'Long',因為 'Long' 不是委托類型。
您可能想要做的是創建一個委托,然后將 adab 的類型更改為該委托類型。 將此添加到類中:
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,您仍然需要它。
那時他的編譯器應該很高興。 但是,其他人提出的觀點很重要。 整數和長整數的長度在 VB6 中與在 VB.NET 中不同。 因此,在 .NET 中,您需要在 VB6 中使用 Long 的任何時候使用 Integer。
關於非托管代碼中的回調,看看這篇類似的帖子是否對你有幫助。
關於您的問題-我認為您不需要回調函數或您發布的示例不正確/不完整-請參閱上面指出的帖子並闡明您的代碼示例。
我假設 MP4_ClientStart 的第二個參數應該是回調函數的地址。 問題很可能是您在此處將其定義為 Long,它在 VB6 中是 32 位值,但在 VB.NET 中是 64 位值。 通過將聲明更改為:
Declare Function MP4_ClientStart Lib "hikclient.dll" _
(pClientinfo As CLIENT_VIDEOINFO, ByVal abab As Integer) As Integer
這是 VB.NET 實現:
Declare Function MP4_ClientStart Lib "hikclient.dll" (ByRef pClientinfo As _
CLIENT_VIDEOINFO, ByVal abab As ReadDataCallBackDelegate) As Integer
Public Delegate Sub ReadDataCallBackDelegate(ByVal nPort As Long, _
ByRef pPacketBuffer As Byte, ByVal nPacketSize As Long)
Public Sub ReadDataCallBack(ByVal nPort As Integer, ByRef pPacketBuffer As _
Byte, ByVal nPacketSize As Integer)
If Not bSaved_DVS Then
bSaved_DVS = True
HW_OpenStream(hChannelHandle, pPacketBuffer, nPacketSize)
End If
HW_InputData(hChannelHandle, pPacketBuffer, nPacketSize)
End Sub
MP4_ClientStart(clientinfo, AddressOf ReadDataCallBack)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.