如何使用Flash Air的标准输出?

时间:2016-02-15 08:01:27

标签: actionscript-3 flash air

我想通过Flash Air制作一个命令行工具,但是AS3没有任何api可以将内容输出到标准输出。

然后,我尝试使用ANE来解决我的问题(通过制作窗口并使用C的printf函数输出内容),但它不起作用。

是否有任何方法可以通过Flash Air使用标准输出,或者通过Flash Air制作命令行工具?

c ++编写的dll代码是:

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;
}

1 个答案:

答案 0 :(得分:0)

  

但是AS3没有任何api可以将内容输出到标准输出。

只有正在运行的操作系统流程才能提供返回标准输出(在C中也称为stdio)。

您可以做的最好的事情是创建一个看起来像命令行工具的应用程序,但实际上它只是运行&将数据传递给实际(本机)OS命令行工具。在工具中的意思是将用户命令捕获到字符串,然后运行nativeProcess涉及该(已解析的)字符串作为进程参数。

您的应用用户类型示例:calc。您的AIR运行:c:\Windows\System32\calc.exe

无论如何,关于你真正的问题......

  

我尝试使用C>的printf函数输出内容,但它并没有   工作

如果你的意思是你用C做了一些 test.exe ,当你让AIR运行它时你想要捕获printf输出然后你可以尝试:

process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, CTest_OutputData);


process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, CTest_ErrorData);

要捕获输出(它将以字节形式发送),请确保已创建一些公共 byteArrayString。以下是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
    }

}

最终提示:您可以通过禁用"桌面"来获取Flash IDE中的跟踪信息。并保持"扩展桌面"勾选。当您安装应用程序时,必须稍后勾选两者。