Tengo dos servicios de Windows, el primero escrito en C# y el segundo escrito en no administrado C++, quiero saber cómo puedo hacer la comunicación bidireccional entre procesos.Interproceso Comunicación entre la aplicación C# y la aplicación C++ no administrada
Respuesta
Si la comunicación entre procesos siempre se va a hacer en la misma máquina, las tuberías con nombre son el camino a seguir porque son más rápidas que otras opciones.
Sin embargo, si existe la más mínima posibilidad de que esta comunicación se produzca a través de los límites de la máquina en algún momento, vaya con el enfoque de socket. Para C++, necesitará el archivo de encabezado winsock2.h. En C#, use el espacio de nombre System.Net.Sockets
.
Ha pasado un tiempo desde que hice C++ no administrado, pero mi recuerdo es que tendrá que escribir menos código C++ si crea el servidor en el lado C++ y luego utiliza la clase TcpClient
en el lado C#.
Use DCOM/RPC o conductos con nombre: cualquier otra cosa es insegura, hacky o ambas cosas.
Los sockets y las Canalizaciones con nombre son dos opciones bien admitidas en los entornos administrados y no administrados.
Los enchufes son probablemente la mejor opción.
Con tomas de corriente, no necesariamente está vinculado a que ambos programas estén en la misma máquina.
Además, es probable que sea la opción más portátil (diablos, Windows incluso tiene select() para enchufes).
Hay varias formas de hacerlo, pero creo que la mejor manera sería usar WCF y COM +. Si aloja un servicio en COM +, puede acceder a él a través de WCF en su servicio .NET, y a través de las interfaces COM en su código no administrado.
Es posible que desee echa un vistazo a las siguientes secciones de la documentación de MSDN para empezar:
Integración de Servicios WCF con COM +: http://msdn.microsoft.com/en-us/library/bb735856.aspx
Integración con aplicaciones COM + Descripción general: http://msdn.microsoft.com/en-us/library/ms734723.aspx
I diría sockets y un sistema de mensajes. Consulte nuestro Google Protocol Buffers.
Cree un objeto COM de Singleton. Mantenga los datos en este objeto COM, que se pueden leer mediante aplicaciones C++ y C#.
diría Redis sería la mejor solución para cualquier tipo de comunicación entre procesos
- 1. Interproceso Comunicación entre la aplicación C++ y la aplicación Java en el entorno del sistema operativo Windows
- 2. Comunicación interproceso productor-consumidor
- 3. Comunicación entre SAP y C#
- 4. Comunicación entre el SERVICIO y la aplicación web/de escritorio
- 5. Pasar datos entre la aplicación C++ (MFC) y C#
- 6. Comunicación entre aplicaciones C#: la manera fácil
- 7. Comunicación segura entre el servidor django y la aplicación iphone
- 8. Herramientas para detectar fugas de memoria para C# y aplicación C++ no administrada
- 9. C# comunicación entre hilos
- 10. Comunicación SSL entre aplicaciones Java y C#
- 11. Comunicación entre C++ y actionscript 3
- 12. C# - WCF - comunicación entre procesos
- 13. Comunicación entre procesos en c/C++
- 14. ¿Cómo implementar la comunicación entre la aplicación de cliente Java (Android) y la aplicación de servidor PHP?
- 15. La aplicación C# finaliza inesperadamente
- 16. Instalador para la aplicación C#
- 17. Comunicación de objetos C++ y Java
- 18. Localización en la aplicación C#
- 19. Comunicación entre la aplicación nativa de iOS y la página web de JavaScript
- 20. ¿Cómo enviar mensajes entre C++ .dll y la aplicación C# usando named pipe?
- 21. ¿Cómo implementar la interfaz de devolución de llamada desde la DLL no administrada a la aplicación .net?
- 22. Es posible el desbordamiento/desbordamiento del búfer en la aplicación web asp.net C# completamente administrada
- 23. Enhebrado, comunicación entre dos hilos C#
- 24. Cómo escribir la aplicación DD-WRT C?
- 25. Comunicación entre la extensión de Firefox y la página javascript
- 26. Comunicación entre el cliente y el servidor utilizando ssl c/C++ - El protocolo SSL no funciona
- 27. asignando memoria "no administrada" en C#
- 28. Comunicación entre la aplicación delphi y el controlador del sistema de Windows NT
- 29. ¿Es posible usar una DLL creada usando C# en una aplicación VC++ no administrada?
- 30. Comunicación entre el modo kernel y la aplicación en modo de usuario
¿cómo una aplicación C++ leer este objeto COM sin utilizar por favor? –