`
hengltyy
  • 浏览: 16814 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Flex与VC++交互通信

阅读更多

Flex以前采用 flash.system.fscommand 与其他web container 或者 ActiveX container进行通信,但是fscommand有一些弊端,比如说//未完待续不能及时返回数据等等,而且已经过时很久了。

还是说说ExternalInterface吧,这个接口类可以让Flex程序被其他的web或者common application container调用,入JavaScript, VB, VC++程序等等,当然相反地,它也让Flex能够去调用对方的函数,并且都能够获取返回值。

直接看例子吧:

 

首先是Flex调用web或者application container的函数,

1. Flex调用Javascript函数,并且获取返回值:

 

    //Flex中定义调用Javascript的方法

    public function showInfoWithJavaScript() : void

    {

         Security.allowDomain("*"); //定义访问安全,其中参数可以是‘*’,也是可以一些domain,例如www.xxx.com,IP地址等

         if (ExternalInterface.avaliable) //检测flash player是否在一个容器里面,并且提供被外部调用的借口,即Flex调用Javascript的有效性

         {

             var arr : Array = ExternalInterface.call("showInfo", info) // 调用Javascript的showInfo方法,并且传递参数info,这个参数可以是常量,也可以是变量,String或者是Object,然后获取Javascript返回的数据

         }

          else

         {

              Alert.show("调用外部的Javascript失败","警告");

         }

    }

 

   //以下是html中加入定义了showInfo方法的javascript

   /html-template/index.template.html
   <head>
    ...
   <script language="JavaScript" src="externalInterface.js"></script>
   </head>

 

   //以下是定义的externalInterface.js

   <script language="javascript">

    var arr : array = ['1','2','3'];

     function showInfo(param) {

         if (param == null)

             return null;

         else

             return arr;   //返回数据给Flex

    }

    </script>

 

2.  Javascript调用Flex的函数,并且获取返回值

     //Flex中定义被Javascript调用的函数

 

     private var arr : Array = ['1','2','3'];

     public function init() : void

     {

         if (ExternalInterface.avaliable)

         {

             ExternalInterface.addCallBack("callFlex", beingCalled);

         }

     }

 

      public function beingCalled(param : Object) : void

      {

          if (param == null)

              return null;

          else

              return arr;  //返回给Javascript数据

      }

 

      //Javascript中调用Flex地方法

      <script language="JavaScript">
             // 其中flashObject可以通过Object的embed引入;
             var callResult = flashObject.myFunction("my name"); 
       </script> 
          ... 
       <object id="flashObject"...> 
          ... 
           <embed name="flashObject".../> 
       </object>

 

3. Flex调用VC++本地程序,并且获取返回值

 

   //Flex中定义调用VC++的方法

    public function callCPPlus() : void

    {

         if (ExternalInterface.avaliable) //检测flash player是否在一个容器里面,并且提供被外部调用的借口,即Flex调用VC++的有效性

         {

             var str : String = ExternalInterface.call("returnToFlex", info) // 调用CV++的showInfo方法,并且传递参数info,这个参数可以是常量,也可以是变量,String或者是Object,然后获取VC++返回的数据,这个返回的数据是XML格式的数据,其格式在后面给出;其中这个call方法让flash player触发一个Flash Call事件来调用VC++方法,其中参数也会被格式化为xml格式的数据;也即他们之间的通信是通过XML格式的数据;

         }

          else

         {

              Alert.show("调用外部的VC++方法失败","警告");

         }

    }

 

    //VC++中定以被Flex调用的方法

    //a. 首先需要在VC++中嵌入flash player插件,定义其对象为m_FlashPlayer

    //b. VC++通过事件对象的request来获取Flex过来的数据

    //c. 通过m_FlashPlayer的SetReturnValue方法返回xml格式的数据给Flex

    void CMyBicapDlg::OnFlashCallShockwaveflash1(LPCTSTR request)  
  {  
     // TODO: Add your control notification handler code here  
      // "<invoke name='%s' returntype='xml'><arguments><string>%s</string></arguments></invoke>"  
   
     // parse request  
     TiXmlDocument request_xml;  
      request_xml.Parse(request);  
     const char* request_name = request_xml.RootElement()->Attribute("name");  
   
    if (strcmp(request_name,"savedVideosDirectory") == 0 || strcmp(request_name,"bufferDirectory")     == 0 || strcmp(request_name,"preferredExportDirectory") == 0)  
    {  
    // choose path  
    CoInitialize(NULL);  
    BROWSEINFO bi;  
    bi.hwndOwner = this->GetSafeHwnd();  
    bi.pidlRoot = NULL;  
    bi.pszDisplayName = NULL;  
    bi.lpszTitle = NULL;  
    bi.ulFlags = BIF_BROWSEFORCOMPUTER|BIF_RETURNONLYFSDIRS|BIF_STATUSTEXT;  
    bi.lpfn = NULL;  
    LPCITEMIDLIST pidl = SHBrowseForFolder(&bi);  
    if(pidl != NULL)  
   {  
      TCHAR tpath[MAX_PATH] = _T("");  
      BOOL bresult = SHGetPathFromIDList(pidl, tpath);  
      if (bresult)  
     {  
        std::string re_value = "<string>";  
        re_value = re_value+tpath+"</string>";  
        m_FlashPlayer.SetReturnValue(re_value.c_str());  
     }  
   }   
   CoUninitialize();  
  }     
}

 

4.  VC++调用Flex定义的函数

 

     //Flex端定义被VC++调用的方法,

     private function initApp() : void
    {
        Security.allowDomain("*");

        if (ExternalInterface.available)
       {
           ExternalInterface.addCallback("sendToActionScript", receivedFromCPPlus);
        }
    }

   public function receivedFromCPPlus(value : String) : String
  {
        Alert.show("C++传入参数->" + value, "提示"); //receive from C++ to Flex
        return channelList.selectedItem.ChannelNum; //return value from Flex to C++
  }

  //VC++定义的调用Flex方法

  //m_flashPlayer同样如上面所定义的那样,是flash player插件的对象

  CString ret = m_FlashPlayer.CallFunction("<invoke name=\"sendToActionScript\" returntype=\"xml \"><arguments><string>aaa</string></arguments></invoke>");

分享到:
评论
1 楼 starshine_java 2012-11-08  
朋友... 我开发 C++ 与 Flex 通信。

你的第四种方法 我尝试写了  没有成功 能留言细说吗?

相关推荐

    flex与JS交互示例

    5. **实际应用**:Flex与JavaScript的交互广泛应用于网页中的数据交换、用户交互、页面导航等场景。例如,Flex可以用于复杂的计算或图形渲染,而JavaScript则负责处理DOM操作和页面逻辑。 在提供的示例"flexWithJS...

    Flex与.NET交互

    Flex与.NET交互是一种常见的跨平台应用开发场景,它允许基于Adobe Flex的前端应用程序与Microsoft .NET框架后端服务进行通信。这种交互使得开发者能够利用Flex的富互联网应用(RIA)特性与.NET的强大后端功能相结合...

    flex与js交互2

    ### Flex与JavaScript交互详解 #### 一、引言 随着Web技术的发展,不同语言之间的通信变得尤为重要。在Flex与HTML的结合中,Flex通常作为富客户端应用,而JavaScript则负责处理网页逻辑。为了实现二者之间的无缝...

    Flex和java交互的示例代码

    ### Flex与Java交互知识点 #### 一、简介 在Flex与Java进行交互的过程中,主要涉及到的是前后端的数据传输。本文将详细介绍如何通过Flex与Java进行数据交换,包括Flex客户端的实现方式、Java后端的数据处理逻辑,...

    Flex与JS交互

    Flex与JavaScript交互是Web开发中的一个重要技术,它允许在Adobe Flash Player或Adobe AIR环境中运行的Flex应用程序与HTML页面中的JavaScript代码进行通信。这种交互性极大地扩展了富互联网应用(RIA)的功能,使得...

    Flex与Java实现通信

    通过使用BlazeDS,可以有效地实现在Flex与Java之间的数据通信,从而构建出功能强大且交互丰富的Web应用程序。本文详细介绍了如何搭建开发环境并使用BlazeDS实现Flex与Java之间的通信,希望能够帮助开发者更好地理解...

    Flex与Java的交互

    Flex与Java的交互是跨平台应用开发中的常见技术组合,允许前端用户界面(UI)与后端业务逻辑进行高效沟通。在本文中,我们将深入探讨如何使用Flex 4与Java进行通信,并通过三种不同的方法实现这一目标:RemoteObject...

    flex与ajax交互、flex与javascript交互.docx

    本文将详细介绍如何使用Flex与Ajax进行交互以及如何实现Flex与JavaScript之间的通信。 #### 二、Flex-AjaxBridge技术概述 Flex-AjaxBridge技术是一种用于在Flex应用和基于JavaScript的Ajax应用之间进行通信的技术...

    Flex与java交互

    ### Flex与Java交互详解 #### 一、引言 随着技术的发展,前端开发与后端服务之间的交互变得越来越重要。Flex作为一种流行的富互联网应用程序(RIA)框架,与Java结合使用时能够实现强大的功能。本文将详细介绍如何...

    flex与java交互源码

    Flex与Java交互是Web开发中的常见技术,尤其在构建富客户端应用时,它允许前端的Flex界面与后端的Java服务器进行数据交换和业务逻辑处理。Flex作为一个强大的RIA(Rich Internet Applications)开发框架,提供了丰富...

    flex与js交互 关于ExternalInterface使用的小例子

    标题“flex与js交互 关于ExternalInterface使用的小例子”指出了本文将探讨如何使用Flex的ExternalInterface类与JavaScript进行通信。ExternalInterface是Flex提供的一个API,允许ActionScript(Flex的主要编程语言...

    flex flex和 java交互

    标题"flex 和 java交互"指出了一个关键的技术融合,即Flex与Java的整合,允许Flex前端与Java后端进行数据和功能的通信。这种交互通常是通过AMF(Action Message Format)协议实现的,它提供了一种高效的数据序列化...

    flex和javascript交互例子

    在Flex中,我们可以使用`ExternalInterface`类来与JavaScript进行交互。`ExternalInterface.addCallback`方法允许我们在JavaScript中调用Flex组件的方法,而`ExternalInterface.call`方法则用于在Flex中调用...

    flex 与 flash 交互

    本篇文章将深入探讨Flex与Flash之间的交互,以及如何实现它们之间的相互调用。 Flex是一种基于MXML和ActionScript的开源框架,主要用于构建用户界面。它提供了一个强大的组件库,可以快速地创建复杂的、数据驱动的...

    flex开发例子 flex与后台交互的例子 flex工程

    在Flex应用中,与后台交互通常涉及到网络通信,主要通过HTTPService、WebService或AMFChannel等组件来完成。HTTPService允许开发者发送HTTP请求到服务器,获取或提交数据;WebService则用于调用符合SOAP协议的Web...

    Flex与Servlet之间数据的交互

    Flex与Servlet之间的数据交互是JavaWeb开发中的一个重要环节,它涉及到客户端富互联网应用程序(RIA)与服务器端数据处理的协同工作。Flex作为一个基于Adobe Flash Player的前端开发框架,主要用于创建具有丰富用户...

    Flex和java交互搭建

    Flex和Java交互搭建是开发富互联网应用程序(RIA)时常用的一种技术组合,它允许前端的Flex界面与后端的Java服务器进行数据交换和业务逻辑处理。这个项目新手用来练手非常合适,因为其结构简单,易于理解。接下来,...

    C#与flex交互

    标题中的"C#与Flex交互"指的是在开发过程中,使用C#作为后端处理逻辑,而Flex作为前端用户界面,两者之间进行数据和功能的通信。Flex是一种基于Adobe AIR和Flash Player运行时的开源框架,主要用于构建富互联网应用...

    Flex与Java交互通讯视频详解

    Flex与Java交互通讯是Web开发中的一个重要话题,它涉及到客户端与服务器端的高效协同工作。Flex,作为Adobe的开源框架,主要用于构建富互联网应用程序(RIA),而Java则是一种广泛使用的后端开发语言,能提供强大的...

    flex与java通信

    Flex和Java之间的通信是Web应用程序开发中的一个重要环节,它允许前端用户界面(UI)与后端服务器进行数据交互。Flex是一种基于Adobe Flash Player或Adobe AIR运行时的富互联网应用程序(RIA)开发框架,而Java则是...

Global site tag (gtag.js) - Google Analytics