Estas macros entrar las interfaces de un objeto en su mapa COM para que pueda accederse por QueryInterface. El orden de las entradas en el mapa COM es que las interfaces de orden se comprobarán una coincidencia IID durante QueryInterface.
Cada objeto que quiere exponer sus interfaces a través de QueryInterface debe tener su propio mapa COM. El mapa COM comienza con la macro BEGIN_COM_MAP. Se agregan entradas de interfaz con uno o más de las macros COM_INTERFACE_ENTRY , y el mapa se completó con la macro END_COM_MAP . Por ejemplo:
BEGI&N_COM_MAP(CMyObject)
nbsp; COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMyObject)
END_COM_MAP)
Consulte el ATL COMMAP muestra de ejemplos de uso de los diferentes tipos de COM asignan macros de entrada.
Tenga en cuenta que la primera entrada en el mapa COM debe ser una interfaz en el objeto que contiene el mapa COM. Por lo tanto, no se puede iniciar las entradas de mapa COM con COM_INTERFACE_ENTRY_CHAIN, que provoca el mapa COM de un objeto diferente a buscarse en el punto donde COM_INTERFACE_ENTRY_CHAIN (COtherObject) aparece en el mapa de COM del objeto. Si desea buscar el mapa COM de otro objeto en primer lugar, agregue una entrada de interfaz para IUnknown al mapa COM, entonces la cadena mapa de COM del otro objeto. Por ejemplo:
BEGI&N_COM_MAP(CThisObject)
nbsp; COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(COtherObject)
END_COM_MAP)
Precaución nbsp; La versión 3.0, ATL utiliza la palabra clave compilador __uuidof ( clase ) para obtener el IID correspondiente para una clase dada. Debido a cambios en las macros COM_I&NTERFACE_ENTRY eficaces en la versión 3.0, ahora es simplemente incluir el encabezado de la interfaz utilizar, en lugar de vincular también a una biblioteca que define los coincidentes IID de la interfaz. Este cambio puede causar problemas si el encabezado anteriormente fue generado por una versión anterior de MIDL, o si fue codificada y no marcado adecuadamente. Si la declaración de la interfaz en el encabezado no se ha marcado con un asociado __declspec ( uuid )y, a continuación, cualquier intento de utilizar la palabra clave __uuidof para dicha interfaz se producirá un error. Puede volver a las mayores (ATL 2.x) COM_INTERFACE_ENTRY macros mediante la definición de _ATL_NO_UUIDOF en la configuración de compilación para evitar cualquier problema con este nuevo comportamiento.
A continuación se muestran las macros de entrada disponibles:
Mapa COM Macros de entrada