2012-04-17 19 views
6

Soy nuevo en la programación COM y creo un par nativo COM/cliente COM nativo desde Visual Studio 2010. Tanto el cliente como el servidor viven en la misma solución. Me gustaría saber cuál es la forma más adecuada de incluir el apéndice del cliente generado y el archivo de encabezado en el proyecto del cliente. Creé el MIDL en mi proyecto de servidor, y cuando compilo el proyecto, los archivos _h.h, _i.c y _p.c se generan en el directorio de origen de mi proyecto.Compilación del código del cliente COM nativo en el cliente, usando VS2010

  • ¿Necesito compilar ambos archivos .c en mi proyecto de cliente?
  • ¿Es la mejor manera de compilarlos en el proyecto del cliente agregándolos como archivos vinculados en el proyecto del cliente desde el directorio de origen del proyecto del servidor?
  • ¿Existe alguna manera de que Visual Studio sepa que los archivos _h.h, _i.c y _p.c están desactualizados cuando modifico el MIDL, o debo recordar volver a compilar el proyecto del servidor en cualquier momento Toco el MIDL?
  • ¿Cuál es el mejor lugar para que vaya el archivo .h? ¿Puede ir en el archivo stdafx.h en el proyecto del servidor? Si es así, ¿es correcto agregar el directorio de origen del proyecto del servidor al encabezado que incluye los directorios del proyecto del cliente?
  • ¿Debería el proyecto del cliente tener una "Referencia" (en el sentido de Referencia de Visual Studio) para el proyecto del servidor?

Además, me gustaría hacer este registro gratis. ¿Hay algo extra que deba hacer en este caso, además de tener manifiestos para mi cliente y mi servidor?

..

edición

Mirando el artículo de MSDN aquí: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366830(v=vs.85).aspx, se observa que de los archivos generados, si yo quiero apoyar en proceso de activación reg-libre, sólo Necesito compilar _i.c e incluir los archivos _h.h en mi programa de cliente.

dlldata.c, y _p.c parecen ser utilizados para crear una DLL proxy, que admite el registro en una computadora remota (para la activación por una computadora remota? O también la computadora local, fuera de proceso? Si es necesario para equipo local, fuera del proc, ¿por qué es necesario dado que la DLL del servidor COM se ha registrado? el DLL de servidor COM es diferente de la DLL proxy, ¿verdad?)

Muchas gracias,

--Matt

Respuesta

5

Los _p.c y dlldata.c generados se deben compilar en un proyecto separado para compilar el DLL de proxy/stub. No siempre lo necesita, solo cuando coordina llamadas en apartamentos o procesos.

El archivo _i.c generado proporciona los valores GUID. Compilarlo en el servidor y el proxy/stub. Compilarlo en el cliente está bien, pero usar la palabra clave __uuidof es más fácil.

El archivo _i.h generado contiene la interfaz y las declaraciones de clase. Necesitarás #incluirlo en el servidor y el cliente.

Midl.exe debería volver a generar automáticamente estos archivos cuando cambie el archivo .idl. Lo que a su vez asegura que el cliente, el servidor y el proxy/stub sean reconstruidos.

stdafx.h está bien, sí en el directorio de inclusión.

No en la "referencia", el cliente y el servidor no tienen dependencia de enlace.

Deberá escribir el manifiesto para com sin registro e incrustarlo en el cliente.

+0

Gracias Hans, lo agradezco. Para aclarar: ¿necesito el proxy/stub DLL si estoy coordinando entre el MTA y una STA en un único proceso en el servidor? Si es así, ¿qué hago aquí? ¿Construyo _p.c y dlldata.c en un proyecto separado y despliegue el archivo DLL con mi cliente y servidor por separado sin ninguna referencia entre ellos? Además, ¿me puede indicar una página o recurso en la palabra clave __uuid? Encontré [__uuidof] (http://msdn.microsoft.com/en-us/library/zaah6a61 (v = vs.80) .aspx), ¿es eso? Si es así, ¿dónde obtiene esta información en el cliente, desde el manifiesto sin registro durante la compilación? – Matt

+0

Sí y sí. Despliegue y registre las claves CLSID e Interfaz. Es __uuidof, se deriva de la declaración de interfaz en el archivo _i.h. –

+0

¿por qué no importa #importar el tlb? – deltanine

Cuestiones relacionadas