VB6 与 AS2之间的数据通讯,AS3类同

2008年的时候我在百度知道上已经回答过,你亦说你看过这帖了,但你说还不明白 那我就详细地说一下吧
http://zhidao.baidu.com/question/43875593.html?si=1


flash发送数据到容器    javascript(面向网页)中一般推荐使用   flash.external.ExternalInterface.call

但在VB(或其它的语言中),一般建议使用fscommand(command, args)这种方式来通讯 ,

在VB端(其它就是基于shockwaveFlash控件的内部事件 其它VC Delphi类同)

有一个这样的针对swf 控件的事件处理子过程 

Private Sub ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
'具体看看形参就知道 如何跟  flash中的 fscommand函数格式对应了 
    Select Case command
        Case "play"

        Case "stop"
    
    End Select
End Sub







flash -> VB的通讯 就像上面这样 
通过 select case 来判断分支多个command的操作




而重要的是 VB -> flash方面的使用

一般的SetVariable这种方法  或者 使用 flashVars来传入参数,都是基于很被动的方式动作,即设置了值 ,如果flash方面不主动检测的话,就不会引发其它相关的动作

所以一般推荐使用基于事件处理的  callFunction方式

swf控件.callFunction  xml格式数据

xml格式数据的构成是
<invoke name="flash里面的侦听名" returntype="xml"><arguments><string>数据</string></arguments></invoke>

要发送的数据需要使用 <数据类型></数据类型> 包裹
相关的类型说明详见 http://www.cnblogs.com/maconel/archive/2010/09/29/1838743.html 

但一般使用默认的String就足够了 包括数值数据也可以用它发送


这是最基本的数据格式  即可以这样写

swf控件.callFunction  <invoke name=""flash里面的侦听名""returntype=""xml""><arguments><string>数据</string></arguments></invoke>
'<string>数据</string>  这里设置要发送的字符数据





而flash方面要写的as代码

as2:  

flash.external.ExternalInterface.addCallback("flash里面的侦听名",this, funcCall);
function funcCall(str1:String):Void{
     //这里的str1对应第一个参数  就是 数据
   //如果有多个参数 依次在这里形参声明
   //传入的数据可以在flash里任意处理
}



as3:  
//as2和as3中的 ExternalInterface对象的  addCallback函数原型有所不同   这里不用添加this指向
flash.external.ExternalInterface.addCallback("flash里面的侦听名", funcCall);
function funcCall(str1:String):void{
     //这里的str1对应第一个参数  就是 数据
   //如果有多个参数 依次在这里形参声明
}








这里为了方便  整理出一个vb端的发送代码 直接调用封装好的方法就可以发送数据
复制内容到剪贴板
代码:
Private Sub Form_Load()
ShockwaveFlash1.Movie = App.Path & "\as2.swf"
   '下面这是必须的格式   使用 getStr函数为传入的字符串两边加上<String></String>
   'getCallFuncStr函数为已经格式好的 参数对添加上头尾的xml格式声明
  'CWScallFunc  重构调用swf控件的方法 派发数据
    Dim str As String
    str = getStr("strUsername") & getStr("strUserid") '这里传入两个参数
  CWScallFunc ShockwaveFlash1, getCallFuncStr("UserData", str)
   
End Sub
Private Sub ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
    Select Case command
        Case "trace"
            MsgBox args
    End Select
End Sub
Private Function getStr$(v$)
    '时间关系 这里只设置默认的string 如有更多数据类型需要 可参看http://www.cnblogs.com/maconel/archive/2010/09/29/1838743.html
    
    '自行扩展
    getStr = IIf(v <> "", "<string>" & v & "</string>", "")
End Function
Private Function getCallFuncStr$(FuncName$, Optional v$ = "")
'=======此参数  FuncName$需与flash端侦听名同步
    Dim strXmlop, strXmled As String
    strXmlop = "<invoke name=""" & FuncName & """returntype=""xml""><arguments>" '定义XML开始语句 name 后定义调用函数名
    strXmled = "</arguments></invoke>"
   getCallFuncStr = strXmlop & v & strXmled
End Function
Private Sub CWScallFunc(obj As ShockwaveFlash, v$)
    '重构
    obj.CallFunction v
    '如果报 callfunction IShockwaveFlash 失败 基本就没救了 flash10的问题
End Sub
[ 本帖最后由 HSZZLZL 于 2011-1-11 11:43 编辑 ]

posted on 2011-04-19 15:55 aiaiwoo 阅读(553) 评论(0)  编辑  收藏 所属分类: ASP/Visual Basic


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿

随笔分类

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜