NativeProcessのサンプル

AS→(コマンドライン引数)→C++/C#のアプリ→(標準出力)→ASの連携を作ってみた。

FlashはWebアニメーションツールからスタートして、「一回作れば、いろんな環境でも同じように見れる」ことを大きな売りとして、ブラウザ内を主戦場に発展してきた。近年、AIRという仕組みでデスクトップアプリケーションも作れるようになったが、「いろんな環境でも同じように見れる」というコンセプトが足を引っ張ってか、OS/ハードウェア環境に依存するような部分に関してはどうしても心もとない部分がある。
そこで、Flash部分に関してはOS/ハードウェア環境に依存しないままにして、その代わりFlash以外のアプリ/言語との連携をスムーズにしようってのが、ここで使っているNativeProcessや近々正式リリースされる予定のNative Extension。

弊社でもデジタルサイネージとして特定のハードウェアに特化した連携を作ったり、実験的にKinectを使ったコンテンツを作ってみたりしているので、使っている。
ここでは、AIRから、C++/C#によるアプリケーションをコマンドライン引数つきで呼び出し、アプリケーション側からAIRに対して標準出力で値を渡す、という連携の基本を紹介する。

C++とC#の例二つがあるが、ほぼ同じ処理を二つの言語で書いた。

ファイル

110915ascscpp.zip
開発環境は、Windows7 64bit、Microsoft Visual C++ 2010 Express、C# 2010 Express、FlashDevelop 4.0.0 beta2
(たぶん、Visual Studio 2010 / Expressとかがインストールされてないと、動きません。)

ActionScript

まずは慣れているAIR側。C++またはC#のアプリをコマンドライン引数(arguments)つきで、NativeProcessを使って、起動する。NativeProcessには、標準出力を受け取るイベントを仕込んでおいてある。
こちらのコードでは、C#のアプリを呼び出すようになっているが、private var _fileName:String = ‘ConsoleApplication1.exe’;をコメントアウトにして、private var _fileName:String = ‘20110812c800.exe’;のコメントアウトを外せば、C++のアプリが動く。

C#

引数を受け取ったら、標準出力に出す。ASに近い書き方なので、ちょっと嬉しい。

C++

引数を受け取ったら、標準出力に出す。

Native Extensionについて

Native Extensionについて詳しく知りたい場合は次が参考になる。