VB6 .Net互操作。将.Net Date属性传递给VB6函数ByRef没有被更新

By simon at 2018-02-07 • 0人收藏 • 46人看过

我有一个混合VB6(入口点).NET应用程序。 在.Net我有一个具有Date属性(Date1-Date4)和exp的类osed 和COM Visible等VB6代码。 在VB6代码中有一个方法需要一个Date ByRef并修改它。 用一个date在VB6(dt1-dt4)中声明这工作正常,日期变量I 通过ByRef得到更新,但是如果我通过我的课 (Date1-Date4)dosnt得到更新。 一个工作是将TmpDate传递给方法,然后赋值 战后ds到.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

1 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

在你的第一个代码示例中,你传递一个属性(dotNetDates.Date1)。在你的第二 代码示例,您传递一个变量(dt1)。VB6和VBA不支持传递属性为ByRef.(也不是 .NET CLR,但有趣的是,VB.NET does support it,看[许多情况下 为ByRef(https://blogs.msdn.microsoft.com/jaredpar/2010/01/21/the-many-cases-of- 按地址/)。) * Repro example *(纯VBA) Class myclass

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

登录后方可回帖

Loading...