Открытие файла .exe из приложения AIR и установление связи между двумя - PullRequest
2 голосов
/ 27 декабря 2011

Я пытаюсь открыть файл .exe, написанный на C ++, из моего приложения AIR. Файл .exe просто получает пользовательский ввод и выводит то же самое. Я использую класс Native Process в своем приложении AIR и могу запустить процесс и записать входные данные в стандартный поток ввода процесса (который передается прослушивателем событий), но я не получаю отраженные данные из стандарта выходной поток. Все, что я получаю, это выходные данные из прослушивателя событий STANDARD_INPUT_PROGRESS, а затем оператор «Нажмите любую клавишу для продолжения ...», который обычно отображается после завершения выполнения приложения C ++.

Код Actionscript для моего приложения AIR выглядит следующим образом

import flash.desktop.*;
import flash.events.*;
import flash.filesystem.*;
var process:NativeProcess;

if(NativeProcess.isSupported){
   setupAndLaunch();
}
else
{
   trace("NativeProcess not supported.");
}

function setupAndLaunch():void
{
    var executablePath:String="C:/Interfacing.exe";
    var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();    
    var file:File=new File(String(executablePath));
    var args:Vector.<String> = new Vector.<String>();

    nativeProcessStartupInfo.executable=file;
    process=new NativeProcess();
    process.start(nativeProcessStartupInfo);
    process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,onOutputData);
    process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,onErrorData);
    process.addEventListener(NativeProcessExitEvent.EXIT,onExit);
    process.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR,onIOError);
    process.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR,onIOError);
    process.addEventListener(IOErrorEvent.STANDARD_INPUT_IO_ERROR,onIOError);
    process.addEventListener(ProgressEvent.STANDARD_INPUT_PROGRESS,standardInputProgress);

    process.standardInput.writeUTF("run \n");

 }

 function standardInputProgress(evt:ProgressEvent):void
 {
    trace("standardInputProgress");
 }

 function onOutputData(event:ProgressEvent):void
 {
    trace("Got:",process.standardOutput.readUTFBytes(process.standardOutput.bytesAvailable));
 }

 function onErrorData(event:ProgressEvent):void
 {
    trace("ERROR -",process.standardError.readUTFBytes(process.standardError.bytesAvailable));
 }

 function onExit(event:NativeProcessExitEvent):void
 {
    trace("Process exited with ",event.exitCode);
 }

 function onIOError(event:IOErrorEvent):void
 {
    trace(event.toString());
 }

Код C ++ выглядит следующим образом:

#include<cstdio>
#include<cstdlib>
#include<iostream>

using namespace std;
int main(int nNumberOfArgs,char* pszArgs[])
{   
char temp[80];
cin>>temp;
cout<<"The input recieved is "<<temp<<"\n";
system("PAUSE");
return 0;
}

Пожалуйста, помогите мне. Заранее спасибо

...