我想通过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);
要捕获输出(它将以字节形式发送(,请确保您已创建一些公共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
}
}
最后提示:您可以通过禁用"桌面"并保持"扩展桌面"处于选中状态来获取Flash IDE内部的跟踪。稍后在安装应用程序时必须勾选两者。