Vedi post precedente.
Dopo pranzo la ricerca ha preso una svolta.
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.
powered by IMHO 1.1 with Emoticon Formatter