1.加载flash组件 一、基本原理及过程 Flash通过ExternalInterface类与容器应用程序进行通信。为此,ExternalInterface类提供两个静态属性和两个静态方法。 ExternalInterface.call(“函数名”,[参数…])方法执行容器应用程序的代码,该方法至少需要一个字符串参数来指定要调用的函数名,其它任何参数将作为参数被传递给被调用函数。在除浏览器外的其它容器中,此方法调用将导致flash player ActiveX控件的flashcall事件发生。Flash Player 将指定的函数名及所有参数序列化为一个 XML 字符串。容器可以在事件对象的 request 属性中访问该信息,并用它来确定如何执行它自己的代码。为了将值返回 ActionScript,容器代码调用 ActiveX 对象的 SetReturnValue() 方法,并将结果(序列化为一个 XML 字符串)作为该方法的参数进行传递。——以上摘自帮助文档 其基本过程为:flash调用—>flash自动将参数打包为xml—>将xml传递给C# —>C#解析参数得到函数名与参数值—>执行C#函数—>将返回值打包为xml—>将xml文件发送回flash—>flash自动解析xml得到返回值 从容器中调用 ActionScript 代码必须执行两项操作:向 ExternalInterface 类注册函数,然后从容器的代码调用它。在运行于台式机应用程序中调用 ActionScript 函数时,必须将已注册的函数名及所有参数序列化为一个 XML 格式的字符串。然后,将该 XML 字符串作为一个参数来调用 ActiveX 控件的 CallFunction() 方法,以实际执行该调用。 其基本过程为:flash中注册函数——将要调用的函数名、参数等信息打包为xml—>将xml传递到flash中执行调用—>执行ActionScript函数—>flash自动将结果打包为xml—>将结果xml传递回C# —>C#解析xml得到返回值 可见,flash与C#通信是通过特定格式的xml文件进行的,因此为了实现通信,C#必须实现一下功能:识别该xml格式以得到flash发送来的信心,将需要传送给flash的信息打包成flash能识别的xml格式。为了使用方便我们可以设计一个代理类专门负责数据的解析与打包工作,这样我们就可以透明的使用该代理类来实现flash与C#间的互相调用。 在flash的示例中有一个IntrovertIM_CSharp项目较好的实现了代理的编写,一般情况下,使用该示例中的ExternalInterfaceProxy类足以满足要求,因此方便起见我也直接采用了该代理类。 该类的使用非常简单,通过将flash控件作为参数传递给该类的构造函数,我们就可以建立一个给控件的代理,简单的响应代理的ExternalInterfaceCall事件及使用代理类的Call()方法就能实现与flash通信,中间的数据转换工作完全由代理透明的实现,用户无需关心。 其它语言及程序课根据上面原理编写自己的代理类来实现数据的解析与打包工作。
二、配置vs 第一步C#添加组件 本文对于flash文件嵌入到winForm窗体后,测试对于flash的命令是否能正确获取其命令对应的指令及参数,已及对于两者交互的方法的demo 一、程序创建 1、 winForm程序需要添加flash控件,用于支持flash文件的播放。
2、 WinForm与flash交互方式
设置对应控件的FSCommand事件的相应方法 图解:
利弊分析:使用A方式FSCommand参数只能传递一个,如果需要传递多个就需要在调用方(flash中)用字符串组合多个参数,传回后被调用方分解参数,局限性明显。使用External API可以实现双向调用,传参与返回值以XML文档格式传递。 图解: Flash ActionScript 中声明提供给 hosting application 调用的回调函数import flash.external.ExternalInterface; ExternalInterface.addCallback("setMessage", null, setMessageArgs); .net程序端 1、 Flash控件的CallFunction方法调用对于的flash提供的方法 2、 Falash控件的FlashCall事件响应flash的方法调用 二、测试结果 1、FSCommand方式运行,查看点击对于falsh命令出发的区域,可以在FSCommand事件的相应方法中查看到对应事件参数。 界面以MessageBox显示参数 2、Flash Player 8 External API的方式与WinForm交互 运行结果 三、结论 对于winForm中嵌入的flash,可以正确触发对应命令,使用FSCommand只能在flash单一参数传递给程序,使用方法调用则可以传递多参数,且可以实现flash与程序的相互调用。 附件下载:http://files.cnblogs.com/dirkcloud/FlashCommandTest.rar |
|