C++和ActionScript 3之间的通信

7

是否可能使用任何IPC机制来从Adobe Flash ActionScript调用C++ API?有什么好的例子吗?

更新:我现在主要想用于桌面应用程序,即Adobe或其他人的桌面运行时。

6个回答

2

非常感谢,我现在主要想用于桌面应用程序...你知道除了套接字API之外,还有哪些高级API可以在C++和AS3/MXML之间进行通信吗? - iceman
1
据我所知,IPC 意味着套接字/共享内存/消息队列等。因此根据您的要求,唯一支持的是套接字。任何高于这些 IPC 的东西都会更慢且不必要,例如,套接字的更高级别是 http 等,您可能不想使用。 - Seeker

2
如果您的目标是Adobe AIR运行时,您可以利用在AIR 2.0中引入的NativeProcess API。该API允许您生成外部进程并通过stdin和stdout与它们通信。
如果您想冒险尝试一些未记录且完全不受支持的操作,您可以通过与Flash Player的内存映射文件交互来接入LocalConnection内部。osflash.org/localconnection网站上有更多详细信息。这种方法有一些限制,并且不受支持。我不建议使用它。
正如其他答案中提到的,您还可以使用套接字连接来发送/接收数据。

2
不建议从Flash播放器中调用,因为这很可能会违反其安全模型。你可以从Tamarin VM调用C++,例如mod-actionscript正在做的那样。一种选择是将你的调用传递到一个AS3服务器,调用一些C++函数并发送回结果。另一种选择是使用alchemy将C++代码交叉编译到AVM2。但是,如果你想调用C++来访问客户机上不可从Flash播放器访问的功能(文件系统访问,UDP或其他),那就没有办法了。
编辑:好的,我想有以下几个选项:
- 查看flash.accessibility 包,并仅使用AS3解决问题 - 创建运行在后台的C++守护程序,通过本地套接字与Flash进行双向通信
- 使用自定义协议(在守护程序中绑定端口并在Flash客户端连接到该端口)。 - 使用LocalConnection。从AS3的角度来看,这个方法比较好看,但是需要在C++侧进行一些黑客技巧,因为你需要掌握连接并实现协议(指针在这里)。
- 使用替代运行时:Adobe Air、Zinc、SWHX(需要Haxe,但后端是neko,但neko可以轻松扩展)

@back2dos:所以你的意思是我可以使用AS3语言,但是不同于Adobe的Flash播放器?有哪些可用的播放器? - iceman
@iceman:嗯,有Lightspark这个开源项目,所以我想您可以修改它来适应您的需求。除此之外,我看不到其他选择。也许,如果您解释一下您想要实现什么,我可以提供更多帮助。 - back2dos
@back2dos: 我计划制作更多易于访问的交互式桌面应用程序。因此,结合Flash丰富的UI和C++强大的编码功能。所以我想使用文本转语音引擎将屏幕上所写的内容读给用户听。 - iceman
@back2dos:非常感谢。我认为使用Flash包不可行,因为我必须制作自己的声音。我不确定LocalConnection对象是否支持Flash Player 10或AIR。我对你提到的套接字创建方法很感兴趣。但是从头开始开发这样的中间件(CORBA?)可能会很困难。也许我误解了。你能否给出更多提示? - iceman
@iceman:假设以最佳方式进行这些C++调用,你会怎么做(例如/伪代码)? - back2dos

0
这要看你所指的“API calls”具体是什么。如果它们指的是IPC机制,通常答案是否定的。你可以编译代码,但将没有实现来支持这些调用。如果你使用sockets,你可以在Flash中实现对它的支持,虽然Alchemy目前不支持socket()API。这个回答能帮到你吗? via

0

前段时间我读到了关于Flash中ActiveX支持的文章。也许你可以编写一个ActiveX包装器来调用你的C++ Api。使用Air 2.0,你还有另一种可能性——可以调用外部程序。如果你编写一个命令行包装器来调用你的api,那么你就可以这样调用它。


我喜欢你的Air 2.0解决方案,你能给我指一些简单的代码示例吗? - iceman
@iceman 请看这里: http://mchristoff.com/2009/12/using-the-air-2-0-nativeprocess-api-to-control-mplayer/ http://www.adobe.com/devnet/air/flex/quickstart/interacting_with_native_process.html - David Feurle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接