From: Alan Sloan on 10 Jun 2010 16:03 I have a Class Library that I am writing that is COM visible to maintain a VB6 app. In this Class Library I have the following classes. Public Class SomeBaseObject Public Function DoSomething() as Boolean ..... End Function .... End Class <ComClass(Item.ClassId, Item.InterfaceId, Item.EventsId)> _ Public Class MyDerivedClass Inherits SomeBaseObject ' These GUIDs provide the COM identity for this class Public Const ClassId As String = "95af8113-4a12-42e4-b6f9-8beb9bdf7591" Public Const InterfaceId As String = "1f7e7d99-d1c0-4732-8d2d-20c258d4883f" Public Const EventsId As String = "de109a8b-ad82-4ed7-8442-087d2ba569c3" .... End Class When I use MyDerivedClass in a .net assy, I can instantiate the MyDerivedClass object and the method DoSomething is visible and available as you would expect. When I use MyDerivedClass in my VB6 app, I can instantiate the MyDerivedClass "object" but I cannot see the method DoSomething(or anything else) from the base class. All I can see or access are the properties and methods of the MyDerivedClass object. What am I missing? Any help would be greatly appreciated! Alan
From: Armin Zingler on 10 Jun 2010 19:29 Am 10.06.2010 22:03, schrieb Alan Sloan: > I have a Class Library that I am writing that is COM visible to maintain a > VB6 app. In this Class Library I have the following classes. > > Public Class SomeBaseObject > > Public Function DoSomething() as Boolean > ..... > End Function > .... > End Class > > <ComClass(Item.ClassId, Item.InterfaceId, Item.EventsId)> _ > Public Class MyDerivedClass > Inherits SomeBaseObject > > ' These GUIDs provide the COM identity for this class > Public Const ClassId As String = "95af8113-4a12-42e4-b6f9-8beb9bdf7591" > Public Const InterfaceId As String = > "1f7e7d99-d1c0-4732-8d2d-20c258d4883f" > Public Const EventsId As String = "de109a8b-ad82-4ed7-8442-087d2ba569c3" > > .... > End Class > > When I use MyDerivedClass in a .net assy, I can instantiate the > MyDerivedClass object and the method DoSomething is visible and available as > you would expect. > > When I use MyDerivedClass in my VB6 app, I can instantiate the > MyDerivedClass "object" but I cannot see the method DoSomething(or anything > else) from the base class. All I can see or access are the properties and > methods of the MyDerivedClass object. > > What am I missing? Any help would be greatly appreciated! > Alan The ComClass attribute is the "quick" way to have interfaces created, but as you see, it has it's drawbacks. Inm VB6, you can still assign a MyDerivedClass object to a variable of type SomeBaseObject because the object implements the base class interface: dim var as SomeBaseObject set var = new MyDerivedClass var.DoSomething 'Works I prefer to have no interface created automatically. Instead, i implement them explicitly. Have a look at the ClassInterface attribute. Instead of creating example code by myself, this seems to be an explaining discussion about it: http://social.msdn.microsoft.com/forums/en/csharpgeneral/thread/7313191a-10db-4a16-9cdd-de9fb80b378a/ -- Armin
|
Pages: 1 Prev: checking whether the current object is a specific class. Next: Make a component on runtime. |