AIRを使用してSWCにネイティブ実行可能ファイルを格納して使用する方法

私はAIRアプリケーションを開発しています。このアプリケーションでは、AIRでは不可能なハードウェアアクセスが必要です。 AIRでNativeApplicationクラスを使用することに決めました。これはC#実行可能ファイルを起動します。 AIRアプリケーションと "ネイティブ"アプリケーションは、標準出力ストリームと標準入力ストリームと通信します。

そのようなビット:

private var np:NativeProcess = new NativeProcess();
private var npi:NativeProcessStartupInfo = new NativeProcessStartupInfo();
private var args:Vector. = new Vector.();

private function creationCompleteHandler(event:FlexEvent):void {
   args.push("myCommand");
   args.push("myParameter");
   npi.arguments = args;
   npi.executable = File.applicationDirectory.resolvePath("MyNativeExe.exe");
   np.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, onData);
   np.start(npi);
}

private function onData(e:ProgressEvent):void {
   while(np.standardOutput.bytesAvailable != 0) {
     trace(String.fromCharCode(np.standardOutput.readByte()));
   }
}

MyNativeExe.exeファイルをアプリケーションディレクトリに配置し、* -app.xml supportedProfilesの「extendedDesktop」の値を設定しても問題ありません。

今、MyNativeExe.exeを組み込み、MyNativeExe.exeとのやりとりを管理するAS3クラスを提供するAS3 SWCライブラリを作成したいと思います。したがって、SWCファイルをライブラリとして追加するだけで、このプロジェクトを他のAIRプロジェクトで簡単に再利用できます。新しいAIRプロジェクトに「extendedDesktop」値を手動で追加する必要があるかもしれませんが、問題はありません。

そして私は立ち往生している。 Flash Builderに埋め込むリソースを手動で選択することで、EXEファイルをSWCファイルに埋め込むことができます。

  • SWCファイルの必要な部分のみがSWFとマージされるため、自動的に最終的なSWFファイルに埋め込まれることはありません
  • ([Embed]タグでマージを強制する場合でも...)、埋め込みEXEファイルにアクセスして実行するにはどうすればよいですか? NativeProcessInfo.executableには、バイトストリームではなくFileオブジェクトが必要です。

私が持っている唯一のアイデアは、[埋め込み]でEXEファイルを埋め込み、バイト配列としてロードし、データとしてバイト配列を持つ新しいファイルを作成し、ファイルを実行することです。私はそれが動作するかどうかはわかりませんが、それはEXEの種類の複製があることを意味するので、私はその考えが気に入らない。

誰かがアイデアを持っていますか?

ありがとうございました!

2

1 答え

航空ネイティブ拡張機能を参照する必要があります。簡単に言えば、Air 3.0の新機能の1つは、カスタム言語拡張機能をコンパイルして、大気から直接リンクする機能でした。私はC#を直接使用する例は見つけられませんでしたが、そのページのリンクを参照してください。

1
追加された
今のところ、ネイティブ拡張を構築するのはちょっと難しいようです。自動化されたツールはありません。手書きやスクリプトで書くことがたくさんあります。それは解決策かもしれませんが、私はむしろNativeProcessのやり方に答えて、Flash Builderが提供するツールを快適に使うことで興味を持っています:-)
追加された 著者 Vincent Hiribarren,
@VincentHiribarrenあなたがANEを使うつもりがないなら、他のアイデアはそれを行う唯一の方法です。 ( File.createTempDirectory()を使用して)一時フォルダを作成し、そのフォルダ内のファイルに ByteArray を書き込み、新しい NativeProcess あなたがそれをやっている方法。完了したら、その一時フォルダをクリーンアップしてください。最も美しい解決策ではありませんが、効果があります。
追加された 著者 James Holmes,