`
pgmjl71f
  • 浏览: 9460 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

【转】Flex和外部应用程序进行通信

 
阅读更多

  Flash To EXE 
  Flex端  Flex创建一个Flex Project命名为Demo1,类型选Web application(runs in Flash Player) 
  在Demo1.mxml上添加一个按钮,并未按钮添加点击事件 
  private function ButtonClick(event:MouseEvent):void 
  { 
  //调用外部程序SayHello方法,并传入方法参数"Hunk",输出方法返回值result 
  if (!ExternalInterface.available) return ; 
  var result:String = ExternalInterface.call("SayHello", "Hunk"); 
  trace(result); 
  } 
  EXE端 
  VS2008创建window应用程序项目 
  打开默认的窗体,向窗体添加ShockwaveFlashObject控件 
  向窗体添加下面代码,为ShockwaveFlashObject控件注册FlashCall事件接收Flash发送过来的请求 
  protected override void OnLoad(EventArgs e) 
  { 
  if (m_Init) return; 
  m_Init = true; 
  string swfPath = Path.Combine(Application.StartupPath, ConfigurationManager.AppSettings["SwfPath"]); 
  if (System.IO.File.Exists(swfPath)) 
  { 
  axShockwaveFlash1.FlashCall += new AxShockwaveFlashObjects._IShockwaveFlashEvents_Fla shCallEventHandler(axShockwaveFlash1_FlashCall); 
  //通过配置文件加载Demo1.swf 
  axShockwaveFlash1.Movie = System.IO.Path.Combine(Application.StartupPath, swfPath); 
  } 
  } 
  private void axShockwaveFlash1_FlashCall(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_Fla shCallEvent e) 
  { 
  try 
  { 
  //当点击Demo1.swf的按钮时,该方法就会被触发,这里需要解析swf发送过来的xml请求信息 
  //e.request格式 
  //Hunk 
  //根据e.request内容执行相关操作 
  //操作处理完成后需要返回值到swf,这时需要调用ShockwaveFlashObject控件的SetReturnValue方法 
  //返回Hello!给Demo1.swf 
  axShockwaveFlash1.SetReturnValue("Hello!"); 
  } 
  catch (Exception ex) 
  { 
  } 
  } 
  总结 
  Flex调用外部应用程序方法(或flash to html)时主要使用ExternalInterface.call方法,详细了解该方法请查阅帮助。该方法会有一个比较严重的问题,当外部应用程序方法执行时间过长(大于60秒)而没有值返回时会报1502错误,所以操作时间大于60秒的方法需要另外的方式来实现,下篇会介绍如何实现异步调用方式解决该问题。 
  外部应用程序主要通过注册ShockwaveFlashObject控件的FlashCall事件来接收flash发送过来的请求,请求是xml格式的字符串,详细可查找flex builder的帮助了解。返回值时调用ShockwaveFlashObject控件的SetReturnValue方法。 
  进阶 
  理解了Flex To EXE的原理后就可以设计一些比较有用的方法让EXE来完成Flex所不能完成的操作(不用AIR),下面实现一个本地IO的API 
  package common 
  { 
  import flash.external.ExternalInterface; 
  public class LocalAPI 
  { 
  //Singleton static obj 
  private static var g_Instance:LocalAPI = null; 
  //获取LocalAPI单件实例 
  public static function get Instance():LocalAPI 
  { 
  if (g_Instance == null) 
  { 
  g_Instance = new LocalAPI(); 
  } 
  return g_Instance; 
  } 
  public function LocalAPI() 
  { 
  if (g_Instance != null) 
  throw new Error("Singleton class. Please use Instance static filed."); 
  } 
  //写日志          public function Log(message:String):Number          {              return ExternalInterface.call(Command.FLASH_TO_APP_LOG, message);          }          //复制文件 
  public function CopyFile(srcFilePath:String, destFilePath:String):Number 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_COPY_F ILE, srcFilePath, destFilePath); 
  } 
  //删除文件 
  public function DeleteFile(filePath:String):Number 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_DELETE _FILE, filePath); 
  } 
  //复制文件夹 
  public function CopyFolder(srcFolderPath:String, destFolderPath:String):Number 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_COPY_F OLDER, srcFolderPath, destFolderPath); 
  } 
  //删除文件夹 
  public function DeleteFolder(FolderPath:String):Number 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_DELETE _FOLDER, FolderPath); 
  } 
  //写文件 
  public function WriteFile(filePath:String, content:String, append:Boolean):Number 
  { 
  if (append) 
  return ExternalInterface.call(Command.FLASH_TO_APP_WRITE_ FILE, filePath, content, "true"); 
  else 
  return ExternalInterface.call(Command.FLASH_TO_APP_WRITE_ FILE, filePath, content, "false"); 
  } 
  //读取文件 
  public function ReadFile(filePath:String):String 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_READ_F ILE, filePath); 
  } 
  //获取路径的子文件夹列表 
  public function GetFolderList(folderPath:String):Array 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_GET_FO LDER_LIST, folderPath); 
  } 
  //获取路径的子文件列表 
  public function GetFileList(folderPath:String):Array 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_GET_FI LE_LIST, folderPath); 
  } 
  //创建新的文件夹 
  public function CreateDirectory(folderPath:String):Number 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_CREATE _FOLDER, folderPath); 
  } 
  //判断文件是否存在 
  public function IsFileExist(path:String):Number 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_EXIST_ FILE, path); 
  } 
  //判断文件夹是否存在         
  public function IsFolderExist(path:String):Number 
  { 
  return ExternalInterface.call(Command.FLASH_TO_APP_EXIST_ FOLDER, path); 
  } 
  } 
  }
  转自 http://blog.csdn.net/hunkcai/archive/2009/12/15/50 11767.aspx 
分享到:
评论

相关推荐

    flex 第一步全部源码 实例源码

    Flex简介、Flex的安装和开发环境的建立、MXML 语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript 3.0编程知识、Flex的事件机制、数据绑定、组件的使用、Flex 2.0新...

    flex 第一步 源码 使用组件处理数据和交互

    Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序(RichInternetApplication,缩写为RIA)的利器,目前已广泛应用于各种商业领域,如电子商务、行政管理,企业业务流程自动化等...

    flex 数据库留言本 源码

    《Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序(RichInternetApplication,缩写为RIA)的利器,目前已广泛应用于各种商业领域,如电子商务、行政管理,企业业务流程自动化等...

    Flex第一步 源码

    《Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序(RichInternetApplication,缩写为RIA)的利器,目前已广泛应用于各种商业领域,如电子商务、行政管理,企业业务流程自动化等...

    Flex第一步光盘源码

    Flex简介、Flex的安装和开发环境的建立、MXML 语法简介、使用容器控制界面布局、使用组件处理数据和交互、使用行为对象和动画效果、ActionScript 3.0编程知识、Flex的事件机制、数据绑定、组件的使用、Flex 2.0新...

    flex3的cookbook书籍完整版dpf(包含目录)

    编译和部署使用RSL的Flex应用程序 25.6节. 在Flex Builder调试中创建和监视表达式 25.7节. 在Flex Builder中安装Ant窗口 25.8节. 为自动通用任务创建一个Ant构建文件 25.9节. 使用mxmlc和Ant编译Flex应用程序 25.10...

    flex 教程总汇(新)!

    比较全的教程 目录 第 1-4 章, ActionScript 编程概述讨论 ActionScript 3.0 核心概念,其中包括语言语 法、语句和运算符、ECMAScript 第 4 版语言规范草 ...件输入和输出、外部接口、应用程序安全模型等。

    ActionScript开发人员指南中文版

    外部API示例:在ActionScript和Web浏览器中的JavaScript之间进行通信 第章:AIR中的XML签名验证 XML签名验证的基础知识 关于XML签名 实现IURIDereferencer接口 第章:客户端系统环境 客户端系统环境基础知识 使用...

    SWF(ActionScript3.0)与JavaScipt(JS)通信示例

    “ExternalInterface”类是外部API,在ActionScript和FlashPlayer的容器之间实现直接通讯的应用程序编程接口,例如,含有JavaScript的HTML页。推荐对所有JavaScript与ActionScript之间的通信使用ExternalInterface。...

    S32K144_DEMO-O.rar

    名称:CQU_S32K144_DEV开发板/评估板---综合...* (5) 运用FlexCAN总线通信功能,CAN0发送数据(500Kbps),CAN1中断接收数据(500Kbps) * (6) 运用LPIT定时器超时中断功能,每定时时间到(1s)读取A/D转换结果并通过CAN_0发送

    ActionScript开发技术大全

    28.4.1应用程序配置 591 28.4.2初始化窗口设置 595 28.4.3图标设置 595 28.4.4关联文??柚?596 28.5小结 597 第29章AIR部分特性介绍 598 29.1AIR本地窗口 598 29.1.1创建与关闭本地窗口 598 29.1.2添加窗体内容 600 ...

    L3-Projet-JS-MERN-Projet-ressources

    项目:资源项目 此渲染由Paul Lerat-Lambert进行,Denis ... 折叠,Navbar,NavbarToggler,NavbarBrand,Nav,NavItem ( ):主应用程序的导航栏。 用户界面材料 按钮( ):按钮设计。 芯片:( ):用于在客户管

    Spring攻略(第二版 中文高清版).part2

    12.4 更快地构建更好的应用程序 493 12.4.1 问题 493 12.4.2 解决方案 494 12.4.3 工作原理 494 12.5 从项目中删除Spring Roo 500 12.5.1 问题 500 12.5.2 解决方案 500 12.5.3 工作原理 501 12.6 ...

    Spring攻略(第二版 中文高清版).part1

    12.4 更快地构建更好的应用程序 493 12.4.1 问题 493 12.4.2 解决方案 494 12.4.3 工作原理 494 12.5 从项目中删除Spring Roo 500 12.5.1 问题 500 12.5.2 解决方案 500 12.5.3 工作原理 501 12.6 ...

Global site tag (gtag.js) - Google Analytics