Solo quiero responder a las preguntas adicionales de Tony.
Si desea crear un COM al que se pueda acceder desde VBScript/JScript o desde la antigua ASP "clásica", debe implementar IDispatch.
En Visual Basic 6 o en VBA de MS Office se puede usar de ambas formas. Si agrega Referencia a su COM, se usará "enlazado anticipado" (IUnknown o VTable). Si usa su COM en VB6 o VBA con CreateObject ("ProgIdName"), se usará "límite de retraso".
Es muy importante entender, que para hacer que COM sea accesible desde VB6/VBA ect. no es suficiente solo implemente la interfaz IUnknown. Debe crear y registrar Type Library con el atributo oleautomation
. Para poder hacerlo, puede utilizar en la interfaz de su COM solo oleautomation
tipos de datos compatibles (consulte http://msdn.microsoft.com/en-us/library/aa367129%28VS.85%29.aspx). Para comprender la biblioteca de tipos, desempeña un papel de administración de clientes DLL, por lo que ayuda a un software de cliente como VB6/VBA a enviar datos correctamente como parámetros a su COM. No debe olvidar, que incluso su COM será un servidor InProc, una DLL, los parámetros no serán reenviados directamente a COM, sino que deben ser calculados. Durante la recopilación de datos, se creará una copia de los datos en el hilo donde ejecuta su COM. Hace que su subproceso DLL COM esté a salvo de un lado y su COM no se bloqueará si el subproceso que llama a su método COM finalizará antes de que COM devuelva el valor.
Probablemente mi explicación sobre el cálculo de referencias no es fácil, pero es importante no olvides crear y registrar la biblioteca de tipos que es mejor guardar como un recurso dentro de COM.
¿Qué quiere decir exactamente con 'especificación binaria'? –
@Tony: Significa que COM solo trata cómo los componentes se comunican a nivel binario; no dice nada sobre cómo se desarrollan los componentes o en qué lenguaje está escrito el código o si existe una "jerarquía de clases". Consulte El modelo de objetos componentes: una descripción técnica general @ http://msdn.microsoft.com/en-us/library/ms809980.aspx –
+1 para vinculación temprana versus tardía. –