This is an example of a COM Class Collection written in VB.NET.
You need to start a new project of type library, and set the project property Build -> Register for COM Interop
Do not check: Application, Assembly Information, Make Class COM Visible.
We are using the COMVisible attribute to decide which class is visible for us
The class will have both a default property and an iterator. The iterator is exposed defining a public function.
Function GetEnumerator() as IEnumerator
End Function
It is also a Good Idea having the class to implement IEnumerable
Function GetEnumerator() as IEnumerator Implements IEnumerable.GetEnumerator
End Function
In order to get the new GUID use can either use the VB.NET COM template of the Tools- Create GUID tool.
In addtion you can also use my C# Com template to start with, and translate the code with a C# to VB.NET tool.
Other wise, you can just use the VB.NET COM tool. It is kind of easy to use and much faster
Imports System.Runtime.InteropServices Imports System.Collections 'Wee first define the interface of the Collection <Guid("8beb176f-5357-4bb9-a5c1-38bdd0f7d3df"), _ InterfaceType(ComInterfaceType.InterfaceIsDual), _ ComVisible(True)> _ Public Interface INewEmployees Inherits System.Collections.IEnumerable <DispId(-4)> Shadows Function GetEnumerator() As IEnumerator 'Iterator <DispId(1)> Sub Add(ByVal key As Object, ByVal value As Object) <DispId(2)> ReadOnly Property Count() <DispId(3)> Sub Remove(ByVal key As Object) <DispId(0)> Default Property Item(ByVal key As Object) End Interface 'We define the event interface <Guid("e96bda2f-596f-419b-840c-4bd165930c4d"), _ InterfaceType(ComInterfaceType.InterfaceIsIDispatch), _ ComVisible(True)> _ Public Interface INewEmployeesEvents End Interface '<ComClass(NewEmployees.ClassId, NewEmployees.InterfaceId, NewEmployees.EventsId)> _ <Guid("67d85fea-43d6-457e-8db1-cc9601bdd9ec"), _ ClassInterface(ClassInterfaceType.None), _ ComSourceInterfaces(GetType(INewEmployeesEvents)), _ ComDefaultInterface(GetType(INewEmployees)), _ ComVisible(True)> _ Public Class NewEmployees Implements INewEmployees #Region "COM GUIDs" ' These GUIDs provide the COM identity for this class ' and its COM interfaces. If you change them, existing ' clients will no longer be able to access the class. Public Const ClassId As String = "67d85fea-43d6-457e-8db1-cc9601bdd9ec" Public Const InterfaceId As String = "8beb176f-5357-4bb9-a5c1-38bdd0f7d3df" Public Const EventsId As String = "e96bda2f-596f-419b-840c-4bd165930c4d" #End Region ' A creatable COM class must have a Public Sub New() ' with no parameters, otherwise, the class will not be ' registered in the COM registry and cannot be created ' via CreateObject. Dim _SortedList As SortedList Public Sub New() MyBase.New() _SortedList = New SortedList End Sub Default Public Property Item(ByVal key As Object) Implements INewEmployees.Item Get Return _SortedList(key) End Get Set(ByVal value) _SortedList(key) = value End Set End Property Public ReadOnly Property Count() Implements INewEmployees.Count Get Return _SortedList.Count End Get End Property Public Sub Remove(ByVal key As Object) Implements INewEmployees.Remove _SortedList.Remove(key) End Sub Public Sub Add(ByVal key As Object, ByVal value As Object) Implements INewEmployees.Add _SortedList.Add(key, value) End Sub Public Function GetEnumerator() As System.Collections.IEnumerator Implements INewEmployees.GetEnumerator, System.Collections.IEnumerable.GetEnumerator 'Return _SortedList.GetEnumerator() Dim keys As ICollection = _SortedList.Keys Return CType(keys.GetEnumerator, IEnumerator) End Function End Class
No comments:
Post a Comment