Voglio solo rispondere a ulteriori domande di Tony.
Se si desidera creare un COM che può essere accessibile da VBScript/JScript o dal vecchio ASP "classico", è necessario implementare IDispatch.
In Visual Basic 6 o VBA di MS Office è possibile utilizzare entrambi i modi. Se aggiungi Reference al tuo COM, allora userai "early bound" (IUnknown o VTable). Se si utilizza la COM in VB6 o VBA con CreateObject ("ProgIdName"), verrà utilizzato "late bound".
È molto importante capire che per rendere COM accessibile da VB6/VBA ect. non è sufficiente implementare l'interfaccia IUnknown. Devi creare e registrare Type Library con l'attributo oleautomation
. Per essere in grado di farlo, è possibile utilizzare nell'interfaccia del proprio COM solo i tipi di dati compatibili oleautomation
(vedere http://msdn.microsoft.com/en-us/library/aa367129%28VS.85%29.aspx). Per comprendere la libreria dei tipi è necessario un client di marshalling DLL, quindi è utile un software client come VB6/VBA per inviare correttamente i dati come parametri al COM. Non dovresti dimenticare che anche il tuo COM sarà un server InProc, una DLL, i parametri non saranno in avanti direttamente su COM, ma devono essere sottoposti al marshalling. Durante il marshalling verrà creata una copia dei dati sul thread su cui viene eseguito il COM. Rende sicuro il thread DLL COM da un lato e COM non si arresta in modo anomalo se il thread che chiama il metodo COM verrà terminato prima che COM restituisca il valore.
Probabilmente la mia spiegazione sul marshalling non è semplice, ma è importante non dimenticare di creare e registrare la libreria dei tipi che è meglio salvare come risorsa all'interno di COM.
Che cosa intendi esattamente con "specifica binaria"? –
@Tony: significa che COM indirizza solo il modo in cui i componenti comunicano a livello binario: non dice nulla su come sono sviluppati i componenti o su quale lingua è scritto il codice o se esiste una "gerarchia di classi". Vedere Il modello a oggetti del componente: una panoramica tecnica @ http://msdn.microsoft.com/en-us/library/ms809980.aspx –
+1 per l'associazione anticipata e tardiva. –