VisualStudio: creare un componente COM

In questo articolo spiegherò come creare un componente COM con VisualStudio e come installarlo.


VisualStudio permette di creare con facilità dei componenti COM. Bisogna però seguire alcuni accorgimenti.

Lanciate VisualStudio e chiedete di creare un nuovo progetto; tra i template offerti, scegliete “Class Library”.

Create la vostra classe, inserendo proprietà e metodi secondo le vostre necessità.

In testa alla vostra classe, inserite le seguenti righe:

Public Const ClassId As String = ""
Public Const InterfaceId As String = ""
Public Const EventsId As String = ""

Lanciate ora il programma guidgen.exe (lo trovate nella cartella Tools di VisualStudio), e chiedete di generare un nuovo GUID in formato registry; inserite il numero generato (senza le parentesi graffe!) come valore di ClassId.
Chiedete una seconda generazione da usare per InterfaceId, e un’ultima per EventsId.

Cambiate adesso la dichiarazione della vostra classe; supponendo che la vostra classe si chiami miaClasseCOM, il risultato deve essere simile al seguente:

<ComClass(miaClasseCOM.ClassId, miaClasseCOM.InterfaceId, miaClasseCOM.EventsId)> _
Public Class miaClasseCOM

Prima di compilare, ricordatevi di selezionare le opzioni Make Assembly COM-Visible (linguetta Application|Assembly Information… delle proprietà del progetto), e Register for COM Interop ((linguetta Compile delle proprietà del progetto)

Lanciate la vostra build.

Dalla cartella Debug o Release copiate i file .dll e .tlb, e copiateli nella cartella di destinazione.

Registrate il componente tramite il programma regasm.exe (lo trovate nella cartella del framework). Il comando è il seguente:

regasm.exe C:\dll\miaClasseCOM.dll /codebase /tlb:C:\dll\miaClasseCOM.tlb

Fate attenzione: visto che si usa /codebase, bisogna dare al componente COM un nome univoco (strong name) in modo che non possa avere lo stesso nome di nessun altro componente COM registrato, pena l’instabilità o l’inusabilità del sistema.

Un’ultima cosa: quando userete il componente COM in (ad esempio) VB6, dovrete referenziare il file .tlb, non il file .dll.

Replica