【发布时间】:2020-02-08 02:39:51
【问题描述】:
我有一个 .NET COM 程序集 A 由 3 个类组成,例如 B、C 和 D。我曾经将我的 VB6 中的这个 COM dll 称为 A.B、A.C 和 A.D。
最近尝试重新编译我的 VB6 项目时,我仍然可以引用 A.B 和 A.C。
但是 D 类在 VB6 对象浏览器中被公开为 A.A_D。我的问题是为什么类名和下划线被附加到类D。
我正在为 DLL 使用 .NET 框架 4.0。在下面找到伪代码供您参考。不使用 ProgID。相反,在 VB6 中使用对对象的直接引用。
A 类:配置为类库
B类:
<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
C类:
<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
D 类:
<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
在 OLEView 中,D 类单独被命名空间 A 前置。B 类和 C 类保持不变。当我回溯这个 DLL 时,命名空间只有在迁移到 Framework 4 后才会被前置。这个问题似乎与prepending-namespace-to-typelib-coclass-name 中提到的问题相似 但这里的区别是我还在使用 Visual Studio 2010 并且我没有找到
嵌入互操作类型属性
OLEView.exe 输出
coclass D
[uuid(00000000-0000-0000-0000-000000000000),
version(1.0),
custom({00000000-0000-0000-0000-000000000000}, "A.D")]
coclass A_D {
interface _Object;
[default] interface _D;
[default, source] dispinterface __D;
};
coclass B
[uuid(00000000-0000-0000-0000-000000000000),
version(1.0),
custom({00000000-0000-0000-0000-000000000000}, "A.B")]
coclass B{
interface _Object;
[default] interface _B;
[default, source] dispinterface __B;
};
【问题讨论】:
-
很难说没有任何代码
-
您没有显示任何代码。您是否在类中使用 [ProgId] 属性?
标签: .net dll com vb6 com-interop