En nuestro proyecto estamos reutilizando muchos códigos Delphi a través de COM en nuestra aplicación asp.net.¿Por qué se prefiere la interoperabilidad de COM sobre P/Invoke en .NET?
De esta manera: el legado Delphi dll => Delphi COM envoltorio => .Net interoperabilidad => asp.net (MVC)
Tenemos algunos problemas con respecto a violaciónes de acceso, descarga de DLL, etc ... tengo ahora portado algunos para usar el DLL heredado directamente a través del código P/Invoke.
Cuando miro los recursos con respecto a COM y P/Invoke, las personas casi siempre aconsejan usar COM. ¿Porqué es eso? ¿No P/Invoke tiene los siguientes beneficios:
- marchamos código siempre utilizará el DLL correcta del lugar del último COM registrada
- Múltiples versiones pueden correr al lado del otro en los servidores (por ejemplo, : DEV, TEST y QA)
- No más registros COM molestia
- mucho más rápido que la comunicación COM (artículos que leí indican un aumento de velocidad del 30%)
¿se puede p/invocar en un dll de 32 bits desde un proceso de 64 bits? No lo creo. – Bond
¿Podría dar algunas referencias que sugieren que se prefiere COM a P/invocar? Estoy totalmente de acuerdo con usted en que P/Invoke es la mejor solución cuando está disponible. La mayoría de las partes internas de .NET BCL se implementan en términos de P/Invoke a las API de Win32. La única razón para usar la interoperabilidad COM es cuando no tiene otra opción, p. interoperabilidad con aplicaciones de Office o Windows API que son COM-only. – Govert
¿Recuerdas el infierno de DLL? En lugar de usar el dll correcto, su código usará el primer dll disponible con el mismo nombre. Cualquier cambio en la API no se detectará hasta el tiempo de ejecución, lo que significa que las versiones son casi imposibles. No se puede crear una DLL que sirva tanto a los clientes más antiguos como a los más nuevos sin cambiar los nombres de las funciones en sí –