我想通过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;
}
答案 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);
要捕获输出(它将以字节形式发送),请确保已创建一些公共 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中的跟踪信息。并保持"扩展桌面"勾选。当您安装应用程序时,必须稍后勾选两者。