如何使用闪光空气的标准输出



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

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

有没有办法用闪光空气的标准输出,或者用闪光空气做命令行工具?

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 %dn", result);
    return resObj;
}

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

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

你能做的最好的事情就是创建一个看起来像命令行工具的应用程序,但实际上它只是运行并将数据传递给实际的(本机(操作系统命令行工具。这意味着在您的工具中,您将用户命令捕获到字符串中,然后运行涉及该(解析的(字符串作为进程参数的nativeProcess

应用用户类型中的示例:calc 。您的空气运行:c:WindowsSystem32calc.exe

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

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

如果你的意思是你做了一些测试.exe用C,当你让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内部的跟踪。稍后在安装应用程序时必须勾选两者。

最新更新