VB.NET类将程序集名称添加为COM中的名称的前缀?

问题描述 投票:1回答:1

我有一个.NET COM程序集A包含3个类,例如BCD。我曾经从我的VB6引用此COM dll为A.BA.CA.D

最近,当我尝试重新编译VB6项目时,仍然可以引用A.BA.C

但是[V0]类在VB6对象浏览器中公开为D。我的问题是,为什么将类名和下划线附加到类A.A_D

我正在使用.NET Framework 4.0 for DLL。在下面找到伪代码供您参考。不使用ProgID。而是在VB6中使用对对象的直接引用。

A类:配置为类库

B类:

D

C类:

<ComClass(B.ClassId, B.InterfaceId, B.EventsId), ComVisible(True)> Public Class B

#Region "COM GUIDs"
    'All the real GUIDs/Interface/Events are replaced with zeros for code security purpose
    Public Const ClassId As String = "0000000-0000-0000-0000-000000000000"
    Public Const InterfaceId As String = "00000000-0000-0000-0000-000000000000"
    Public Const EventsId As String = "00000000-0000-0000-0000-000000000000"
#End Region

D类:

<ComClass(C.ClassId, C.InterfaceId, C.EventsId), ComVisible(True)> Public Class C

#Region "COM GUIDs"
    'All the real GUIDs/Interface/Events are replaced with zeros for code security purpose
    Public Const ClassId As String = "0000000-0000-0000-0000-000000000000"
    Public Const InterfaceId As String = "00000000-0000-0000-0000-000000000000"
    Public Const EventsId As String = "00000000-0000-0000-0000-000000000000"
#End Region
.net dll com vb6 com-interop
1个回答
0
投票

没有看到<ComClass(D.ClassId, D.InterfaceId, D.EventsId), ComVisible(True)> Public Class D #Region "GUIDs" 'All the real GUIDs are replaced with zeros Friend Const ClassId As String = "00000000-0000-0000-0000-000000000000" Friend Const InterfaceId As String = "00000000-0000-0000-0000-000000000000" Friend Const EventsId As String = "00000000-0000-0000-0000-000000000000" #End Region 的真实类名,这是不确定的。但是一种可能的可能性是,裸名D会与其他名称冲突,因此编译器(*)添加了程序集名称来区分它。

如果要确认这一点,可以在OLEView或类似工具中为程序集加载D文件并检查IDL,它可能显示相同的.TLB名称。

另一项测试是将A_D更改为几乎所有其他内容,然后重新编译,看看是否有任何效果。

(*不是真正的编译器,而是生成COM包装层和类型库的工具]

© www.soinside.com 2019 - 2024. All rights reserved.