VB6程序没有看到VB.Net COM DLL的属性

时间:2018-05-03 22:10:23

标签: vb.net com vb6

我的客户端在世界各地的大量计算机上安装了VB6程序。它现在需要通过REST API访问外部系统。我在VB.Net中创建了一个面向.NET Framework 4的类库。(这是最近安装的最新版本。)DLL公开了大约十二个公共函数和子例程,以及~40个属性。我使用此PowerShell代码测试了DLL:

tf.nn.dynamic_rnn

可以从PS脚本访问所有方法和属性。但是,当我将DLL加载到VB6 IDE中时,对象浏览器仅显示方法,而不显示属性。如果我无法解决这个问题,我将不得不将它们重新编码为一堆函数和子程序。我讨厌这个主意。

问题reuse confusion看起来很相似,但我没有(明确地,见下文)使用界面,而且我不确定这个问题是否曾被回答。

有谁知道发生了什么,(更重要的是)如何解决这个问题?谢谢!

更新:人们要求查看我的代码,所以这里是条纹样本。我从InterfaceId猜测,Visual Studio Community 2017正在为我创建某种界面。

[System.Reflection.Assembly]::LoadFile( "$directorypath\Debug\MyExample.dll")
$quotaInstance = new-object MyExample.ComClass1

3 个答案:

答案 0 :(得分:1)

由于某些未知原因,VB编译器为标有ComClassAttribute的类提供的自动接口生成忽略了自动实现的属性。您需要显式编写属性的长格式代码。

因此,而不是自动实现的形式:

Public Property Foo As String

你需要:

Private _Foo As String
Public Property Foo As String
    Get
        Return _Foo
    End Get
    Set(value As String)
        _Foo = value
    End Set
End Property

Foo包含在COM接口中。

答案 1 :(得分:0)

我不是VB粉丝,但希望以下示例帮助

Public Class Class1
    Implements IClass1

    Property Property_1 As Int32 Implements IClass1.Property_1
        Get
            Return Property_1
        End Get
        Set(value As Int32)
            Property_1 = value
        End Set
    End Property
End Class

Public Interface IClass1
    Property Property_1 As Int32
End Interface

答案 2 :(得分:0)

如果您的属性属于List<T>这样的通用类型,则无法将其导出到COM。

如果是这种情况,您应该看到.NET编译器发出的一些构建警告,表明这样做。

(问题没有显示一个例子,所以我不知道这是否是这种情况。)