我有一个 .Net 应用程序的混合 VB6(入口点)。
在.Net中,我有一个类,它有一个Date属性(Date1-Date4),并且对VB6代码公开并且COM可见等。
在 VB6 代码中,有一个方法采用 Date ByRef 并对其进行修改。
对于在 VB6 (dt1-dt4) 中声明的日期,这工作正常,我传递 ByRef 的日期变量会更新,但是如果我在我的类上传递 .Net 日期 (Date1-Date4),它不会更新。
解决方法是将 TmpDate 传递给该方法,然后将值分配给 .Net 属性。
但是,我想找到一个合适的解决方案,因为当我替换 VB6 代码时,这很容易被忽略。
VB.Net声明
<ComVisible(True)>
Public Class DotNetDatesClass
Implements INotifyPropertyChanged, IDotNetDatesClass
Private _Date1 As DateTime
<ComVisible(True)>
Public Property Date1 As DateTime Implements IDotNetDatesClass.Date1
Get
Return _Date1
End Get
Set(value As DateTime)
_Date1 = value
End Set
End Property
VB6 示例:
dotNetDates.Date1 = DEFAULT_DATE
dotNetDates.Date2 = DEFAULT_DATE
dotNetDates.Date3 = DEFAULT_DATE
dotNetDates.Date4 = DEFAULT_DATE
getDates connectionString, dotNetDates.Date1, dotNetDates.Date2, dotNetDates.Date3, dotNetDates.Date4
解决方法:
Dim dt1 As Date
Dim dt2 As Date
Dim dt3 As Date
Dim dt4 As Date
getDates connectionString, dt1, dt2, dt3, dt4
dotNetDates.Date1 = dt1
dotNetDates.Date2 = dt2
dotNetDates.Date3 = dt3
dotNetDates.Date4 = dt4
最佳答案
在第一个代码示例中,您传递了一个属性 (dotNetDates.Date1
)。在第二个代码示例中,您传递了一个变量 (dt1
)。
VB6 和 VBA 不支持通过 ByRef
传递属性。 (.NET CLR 也不支持,但有趣的是,VB.NET 支持它,请参阅 The many cases of ByRef。)
重现示例(纯 VBA)
类我的类
Option Explicit
Private myvalue As String
Public Property Get value() As String
value = myvalue
End Property
Public Property Let value(ByVal vNewValue As String)
myvalue = vNewValue
End Property
测试代码
Public Sub test_byref()
Dim x As New myclass
x.value = "OLD"
modify x.value
Debug.Print x.value ' Prints OLD
End Sub
Private Sub modify(ByRef s As String)
s = "NEW"
End Sub
关于.net - VB6 .Net 互操作。将 .Net Date 属性传递给 VB6 函数 ByRef 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642619/