2010-09-10 15 views
7

¿Es posible utilizar cualquier mecanismo de IPC para llamar a una api de C++ desde Adobe Flash actionscript? ¿Hay algún buen ejemplo?Comunicación entre C++ y actionscript 3

Actualización: Me quiere principalmente para aplicaciones de escritorio ahora es decir Adobe/o tiempos de ejecución de escritorio anyuone de otra

Respuesta

0

Realmente depende de lo que los "API" llamadas que se refieren a lo son. Si refieren a los mecanismos de IPC, generalmente la respuesta es no. Puede compilar el código , pero no tendrá la implementación para admitir estas llamadas. Si está utilizando sockets, puede implementar soporte para eso en Flash aunque Alchemy actualmente no admite la API de socket(). ¿Esto ayuda?

via

0

Hace algún tiempo leí acerca de la compatibilidad de ActiveX en flash. Tal vez podría escribir un contenedor ActiveX alrededor de su C++ Api y llamarlo de esta manera. Con Air 2.0 tiene otra posibilidad: puede invocar programas externos. Si escribe un contenedor de línea de comando alrededor de su API, podría llamarlo de esa manera.

+0

me gusta su solución Aire 2.0, ¿me puede dirigir a algunos ejemplos de código simples? – iceman

+0

@iceman ver aquí: http://mchristoff.com/2009/12/using-the-air-2-0-nativeprocess-api-to-control-mplayer/ http://www.adobe.com/ devnet/air/flex/quickstart/interacting_with_native_process.html –

2

No desde el reproductor flash, ya que muy probablemente violaría su modelo de seguridad. Puede llamar a C++ desde la VM Tamarin, que por ejemplo está haciendo mod-actionscript. Una opción sería pasar sus llamadas a un servidor AS3, llamar algunas funciones C++ y enviar el resultado. Otra opción es realizar una compilación cruzada del código de C++ a AVM2 usando alchemy. Pero si desea llamar a C++ para acceder a las funciones en la máquina cliente que no está disponible desde el reproductor flash (acceso al sistema de archivos, UDP o lo que sea), entonces no hay forma.

edición:
Ok, supongo que hay las siguientes opciones:

  • echar un vistazo al paquete flash.accessibility y resolverlo con AS3 única
  • crear un C demonio ++ ejecuta en segundo plano , que puede tener comunicación bidireccional con flash a través de
    • un socket local (se uniría un puerto en el daemon y se conectaría el cliente flash) a ella) con un protocolo personalizado
    • a LocalConnection. Esto se ve un poco mejor desde el punto de vista de AS3, pero requiere un poco de piratería en el lado del C++, ya que se necesita para controlar la conexión y poner en práctica el protocolo (punteros here)
  • utilizar un tiempo de ejecución alternativa: Adobe AIR , zinc, swhx (requiere mucho pero el "back-end" es neko, pero neko puede extenderse fácilmente)
+0

@ back2dos: por lo tanto, ¿qué estás diciendo es que puedo usar el lenguaje as3, pero un reproductor flash diferente de Adobe? ¿Cuáles son los disponibles? – iceman

+0

@iceman: bueno, hay lightspark, que es de código abierto, así que supongo que puedes modificarlo para tus necesidades. Aparte de eso, no veo opciones. Quizás, si me explicaste lo que estás tratando de lograr, podría ser de más ayuda. – back2dos

+0

@ back2dos: planeo hacer aplicaciones de escritorio interactivas más accesibles ... así que combino la rica interfaz de usuario de flash y el poder de codificación de C++ ... así que quiero usar un motor de texto a voz para leerle al usuario lo que está escrito en la pantalla ... – iceman

2

No es posible desde el navegador-jugador. Desde una aplicación de AIR, puede usar Socket API para hacer IPC.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html?allClasses=1

+0

muchas gracias, lo quiero principalmente para aplicaciones de escritorio ahora ... ¿conoces alguna API de alto nivel que la API de socket para comunicarse entre C++ y as3/mxml? – iceman

+1

Por lo que sé IPC significa sockets/shared mem/msgq etc. Así que de acuerdo con su requisito, solo lo soportado es Sockets. Cualquier cosa más alta que estos IPCs será más lenta e innecesaria, por ej. los niveles más altos de sockets son http, etc., que puede que no desee usar. – Seeker

2

Si se orienta el tiempo de ejecución de Adobe AIR, puede aprovechar la NativeProcess API que se introdujo en AIR 2.0.Esta API le permite generar procesos externos y comunicarse con ellos a través de stdin y stdout.

Si te sientes aventurero y quieres hacer algo indocumentado y completamente sin soporte, puedes acceder al interior de LocalConnection interactuando con el archivo de memoria asignado de Flash Player. Hay más detalles en el sitio osflash.org/localconnection. Este enfoque tiene algunas limitaciones y no es compatible. No lo recomiendo

Como se menciona en algunas otras respuestas, también puede usar una conexión de socket para enviar/recibir datos.