ActiveX (2)

Vedi post precedente.

Dopo pranzo la ricerca ha preso una svolta. Smile a bocca aperta

Ecco alcune considerazioni.

  • Vs, con "Register for COM interop" richiama regasm ma con la direttiva /codebase. Questo fa si che non sia necessario registrare il componente nella GAC. L'unica accortezza (per evitare involontari scambi di nome) è quella di utilizzare comunque signed assemblies, questo è il messaggio che compare con regasm /codebase in modalità verbose:

RegAsm warning: Registering an unsigned assembly with /codebase can cause your assembly to interfere with other applications that may be installed on the same computer. The /codebase switch is intended to be used only with signed assemblies. Please give your assembly a strong name and re-register it.

  • Se si omettono i metodi necessari per la registrazione e deregistrazione del server com il componente compare nella lista degli activex installati solo se si implementa la categoria ".NET Category"
  • L'eseguibile tstcon32.exe (l'ActiveX control Test Container) rimane appeso nel task manager bloccando la dll. (Spero la cosa non succeda anche da C++, sono necessari approfondimenti )

Quindi riassumendo:

  • Nuovo Progetto: Windows Control Library
  • Aggiungere in testa:

using System.Runtime.InteropServices;
using System.Reflection;
using Microsoft.Win32;

  • Aggiungere alla classe gli attributi: ProgId, ClassInterface e Guid. E' preferibile definire un'interfaccia pubblica specifica per l'oggetto ed impostare ClassInterfaceType.None in modo da esportare solo i metodi necessari ed evitare incasinamenti vari del registro.
  • Aggiungere i metodi necessari per la registrazione deregistrazione del server com con i relativi attributi: [ComRegisterFunction()] e [ComUnregisterFunction()]
  • Settare una chiave per firmare l'assembly nell'AssemblyInfo.
  • Dopo aver compilato registrare il server con regasm [nomeassembly] /codebase

Per ora è tutto.Pollice Su

powered by IMHO 1.1 with Emoticon Formatter

Print | posted on lunedì 10 gennaio 2005 18:51

Copyright © Gabriele Gaggi

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski