2010-09-10 18 views
7

Czy można użyć dowolnego mechanizmu IPC do wywoływania apk C++ z Adobe ActionScript? Czy są jakieś dobre przykłady?Komunikacja między C++ i actionscript 3

Aktualizacja: I przede wszystkim chcą go dla aplikacji desktopowych teraz tj firmy Adobe/lub czasy pracy stacjonarnych anyuone innego

Odpowiedz

0

To naprawdę zależy od tego, co „API nazywa” odwołać się do to. Jeśli odnoszą się one do mechanizmów IPC, ogólnie odpowiedź to nie. Możesz skompilować kod , ale nie będziesz mieć implementacji , aby obsługiwać te połączenia. Jeśli używasz gniazd, możesz zaimplementować obsługę tego we Flashu , chociaż Alchemy obecnie nie obsługuje obsługi funkcji API socket(). Czy to pomoże ?

via

0

Jakiś czas temu czytałem o wsparcie ActiveX flash. Być może mógłbyś napisać wrapper ActiveX wokół swojego C++ Api i nazwać to w ten sposób. W Air 2.0 masz inną możliwość - możesz wywołać programy zewnętrzne. Jeśli napiszesz w swoim api paczkę z wierszem poleceń, możesz to tak nazwać.

+0

lubię swoje rozwiązanie Air 2.0, może mnie skierować do kilku prostych próbek kodu? – iceman

+0

@iceman patrz tutaj: 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

Nie pochodzi z Flash Playera, ponieważ prawdopodobnie narusza to jego model zabezpieczeń. Możesz wywołać C++ z maszyny Tamarin VM, która działa na przykład mod-actionscript. Opcją byłoby przekazanie połączeń do serwera AS3, wywołanie niektórych funkcji C++ i odesłanie wyniku. Inną opcją jest przekompilowanie kodu C++ do AVM2 przy użyciu alchemy. Ale jeśli chcesz wywołać C++, aby uzyskać dostęp do funkcji na komputerze klienckim niedostępnym z Flash Playera (dostęp do systemu plików, UDP lub cokolwiek innego), to nie ma mowy.

edit:
Ok, załóżmy, istnieją następujące opcje:

  • przyjrzeć się opakowaniu flash.accessibility i rozwiązać go z AS3 tylko
  • utworzyć C demona ++ uruchomiony w tle , który może mieć dwukierunkową komunikację z lampą błyskową poprzez
    • gniazdo lokalne (należy powiązać port w demonie i klient flash połączy się do tego) z niestandardowym protokołem
    • a LocalConnection. To wygląda trochę lepiej z punktu widzenia AS3, ale wymaga trochę hackingu na C++ boku, ponieważ trzeba zdobyć połączenia i wdrożenie Protokołu (wskaźniki here)
  • użyć alternatywnego środowiska wykonawczego: Adobe AIR , cynk, swhx (wymaga haXe, a "backend" to neko, ale neko może być łatwo rozszerzony)
+0

@ back2dos: dlatego mówię, że mogę używać języka as3, ale innego odtwarzacza Flash niż Adobe ?? jakie są dostępne? – iceman

+0

@iceman: cóż, istnieje lightspark, który jest open source, więc przypuszczam, że można go zmodyfikować do swoich potrzeb. Poza tym nie widzę opcji. Może, jeśli wytłumaczysz, co próbujesz osiągnąć, mógłbym bardziej pomóc. – back2dos

+0

@ back2dos: Planuję stworzyć bardziej dostępne interaktywne aplikacje komputerowe ... w połączeniu z bogatym interfejsem Flasha i mocą kodu C++ ... więc chcę użyć silnika konwersji tekstu na mowę, aby odczytać użytkownikowi co jest napisane na ekranie .. – iceman

2

Nie jest to możliwe z poziomu przeglądarki internetowej. Z aplikacji AIR możesz używać Socket API do IPC.

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

+0

dziękuję, przede wszystkim chcę to dla aplikacji komputerowych teraz. Czy znasz API wysokiego poziomu niż interfejs API gniazda do komunikacji między C++ i as3/mxml? – iceman

+1

O ile mi wiadomo, IPC oznacza gniazda/shared mem/msgq itp. Tak więc zgodnie z wymogiem ur obsługiwane jest tylko gniazdo. Wszystko, co jest wyższe niż te IPC, będzie wolniejsze i zbędne, na przykład wyższe poziomy gniazd to http itp., których możesz nie chcieć używać. – Seeker

2

Jeśli kierujesz środowiska wykonawczego Adobe AIR, można wykorzystać NativeProcess API, który został wprowadzony w środowisku AIR 2.0.Ten interfejs API umożliwia odradzanie procesów zewnętrznych i komunikowanie się z nimi za pośrednictwem standardowego wejścia i wyjścia.

Jeśli czujesz się na siłach i chcesz zrobić coś nieudokumentowanego i całkowicie nieobsługiwanego, możesz wejść do wnętrza LocalConnection poprzez interakcję z plikiem mapowanym w pamięci Flash Playera. Więcej szczegółów na stronie osflash.org/localconnection. To podejście ma pewne ograniczenia i nie jest obsługiwane. Nie polecam tego.

Jak wspomniano w kilku innych odpowiedziach, można również użyć połączenia przez gniazdo do wysyłania/odbierania danych.