У меня есть. NET COM-сборка A
состоит из 3 классов, скажем B
, C
и D
. Я использую для обозначения этого COM DLL из моего VB6 как A.B
, A.C
и A.D
.
Недавно, когда я пытался перекомпилировать свой проект VB6, я все еще могу ссылаться на A.B
и A.C
.
Но класс D
отображается как A.A_D
в браузере объектов VB6. Мой вопрос заключается в том, почему Class Name и Underscore добавляются в класс D
.
Я использую. NET framework 4.0 для DLL. Найдите ниже Псевдокод для вашей справки. 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;
};