Я пытаюсь открыть файл .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;
}
Пожалуйста, помогите мне.
Заранее спасибо