【发布时间】:2020-10-02 01:52:18
【问题描述】:
Visual Basic 程序的一部分正在移至 .NET dll。
参数调用成功,一切正常。
如何在长时间运行的异步任务后传递 VB6 的回调函数以供 .NET 调用?
在 .NET 中
Public Delegate Function VBCallBackFunc() As Integer
Public Function DoSomething(a As String, b As String, c As String, _
parent As IntPtr, Optional ByVal CallbackAddr As VBCallBackFunc = Nothing) As Boolean Implements _DotNetLib.DoSomething
VB6
result = DotNetLib.DoSomething(strA, strB, strC, Me.hwnd, AddressOf DotNetCallback)
Public Function DotNetCallback() As Long
MsgBox ("Callback")
End Function
在VB的对象浏览器中:
Function DoSomething(strA As String, strB As String, strC As String,
parent As Long, [CallbackAddr As VBCallBackFunc]) As Boolean
Member of DotNetLib
但它说“AddressOf 运算符的使用无效”???
【问题讨论】:
-
DotNetCallback在类模块中吗? -
我尝试移动到类模块,现在是类型不匹配错误:/
-
它必须在一个普通的模块中。您引用的错误是在类模块中。
-
VB6 没有类型化的回调,它们应该是
Long。就 VB6 而言,VBCallBackFunc是什么? -
您应该改用 .NET COM 事件。它比原始回调更安全:docs.microsoft.com/en-us/previous-versions/dotnet/…