私は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の種類の複製があることを意味するので、私はその考えが気に入らない。
誰かがアイデアを持っていますか?
ありがとうございました!