打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
c# 与flash

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#添加组件
打开VS2005-工具-选择工具箱项-COM组件-选择Shockwave Flash Object-确定
添加好组件往场景上拖放,如果提示注册需求注册
c# 注册控件-在运行输入-回车(flash9f.ocx这个文件以系统中实际文件为准。)
regsvr32 c:/windows/system32/macromed/flash/flash9f.ocx
或者regsvr32 c:/windows/system32/macromed/flash/flash10a.ocx(最好找到这个目录看下自己的flash的版本,找到ocx后缀的文件。)

本文对于flash文件嵌入到winForm窗体后,测试对于flash的命令是否能正确获取其命令对应的指令及参数,已及对于两者交互的方法的demo

一、程序创建

1、 winForm程序需要添加flash控件,用于支持flash文件的播放。

  1. 添加工具箱外部flash ocx控件,C:\WINDOWS\system32\Macromed\Flash\中的xxx.Ocx
  2. 添加后工具箱显示了falsh的”FlashFactory”,“ShockwaveFlash”两个新控件,如果Shockwave Flash无法拖拽至winForm中(提示注册失败),此原因是没有对应的” Microsoft Multimedia Control, version 6.0”控件,同理添加C:\WINDOWS\system32\MIC32.ocx至工具箱即可
  3. 添加Shockwave Flash Object控件至界面,设置播放的swf文件路劲即可

2、 WinForm与flash交互方式

  1. flash命令触发事件FSCommand

设置对应控件的FSCommand事件的相应方法

图解:

  1. 使用 External API,可以实现falsh ActionScript 和 .net 的双向调用

利弊分析:使用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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用Flash和C
Communicate betwen C# and an embeded Flash application ? ADM Blog
AS3与JS通讯
VC知识库文章 - 在VC中使用 Flash 美化你的程序
VBA常用代码解析(第三十一讲)
如何做一个FLASH播放器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服