2016-02-15 4 views
0

Я хочу создать инструмент командной строки Flash Air, но нет никакого api AS3 для вывода контента на стандартный вывод.Как использовать стандартный выход Flash Air?

Затем я пытаюсь использовать ANE для решения моей проблемы (создав окно ane и используя функцию printf C для вывода содержимого), но это не сработает.

Есть ли какие-либо методы для использования стандартного вывода на Flash-воздухе или для создания инструмента командной строки Flash Air?

Код DLL, написанной на C++ является:

FREObject add(FREContext ctx, void* functionData, uint32_t argc, FREObject argv[]) 
{ 
    int32_t x,y; 
    FREGetObjectAsInt32(argv[0], &x); 
    FREGetObjectAsInt32(argv[1], &y); 


    int32_t result = x + y; 
    FREObject resObj; 
    FRENewObjectFromInt32(result, &resObj); 

    //I want to use the "printf" to print content to the console 
    printf("print by dll: the result is %d\n", result); 

    return resObj; 
} 
+0

http://redtamarin.com/about – SushiHangover

+0

нет такой вещи в AIR. – BotMaster

+0

Я не проголосовал, но отредактировал ваш вопрос и покажите функциональный код того, как вы пытаетесь ** читать ** вывод 'printf'. Также придерживайтесь одной темы. Инструмент командной строки? или чтение некоторых **. EXE ** выход? –

ответ

0

но нет никакой апи из AS3 для вывода контента на стандартный вывод.

только бегущий процесс ОС может дать назад стандартного вывода (также называемый stdio в C).

Лучшее, что вы можете сделать, это создать приложение, которое выглядит как инструмент командной строки, но на самом деле он просто запускает & передает данные в реальный (собственный) инструмент командной строки ОС. Смысл в вашем инструменте заключается в том, что вы записываете пользовательскую команду в строку, а затем запускаете nativeProcess, используя эту (проанализированную) строку в качестве аргументов процесса.

Пример в ваших пользовательских типах приложений: calc. Ваш AIR работает: c:\Windows\System32\calc.exe

В любом случае, на ваш реальный вопрос ...

Я пытаюсь использовать функцию PRINTF языка C для вывода контента, но это не работы.

Если вы имеете в виду вы сделали некоторые test.exe с C и когда вы получите AIR запустить его, вы хотите, чтобы захватить printf выход, то вы можете попробовать:

process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, CTest_OutputData); 

или

process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, CTest_ErrorData); 

Чтобы поймать выход (он будет отправлен как байты), убедитесь, что у вас есть общественностьbyteArray и String. Вот пример для STANDARD_ERROR_DATA (скорее всего, вывод идет и здесь, поскольку вы утверждаете, что STANDARD_OUTPUT_DATA не работает).

Код, показанный ниже внутри этой функции, работает одинаково в зависимости от того, какой тип progressEvent вы выберете. Просто введите «правильный». temp_BA - переменная byteArray, которую вы установили ранее.

public function CTest_ErrorData (event:ProgressEvent):void 
{ 
    process.standardOutput.readBytes(temp_BA, temp_BA.length, process.standardOutput.bytesAvailable); 

    if (temp_BA.length > 0) 
    { 
     temp_String = temp_BA.readUTFBytes(temp_BA.length); 
     trace("temp_String is : " + temp_String); //if you want to check it 
    } 

} 

Final TIP: Вы можете получить следы внутри Flash IDE, отключив «рабочий стол» и сохранение «расширенного рабочего стола» галочкой. Оба должны быть отмечены позже, когда вы устанавливаете приложение.

+0

Большое спасибо, VC.One. Извините, я не уточнил свою проблему. Я хочу выпустить свой собственный эфир. – chenze

+0

@chenze, проверьте новое изменение и дайте мне знать, если оно работает. –

+0

Я могу получить результат программы C. Я пробовал ваш код, который выводится на C++, я получил результат от программы, но не выводю на консоль. – chenze