標籤: 暫無標籤

  flash ActionScrtip提供的外部訪問介面,用於Flash虛擬機與ActiveX 容器(ActiveX container))應用程序或 容器應用程序 (Container application)通信。介面定義addCallback()及call()兩個方法及一個屬性available。


  用法:


  因為在Flash幫助中已詳細說明了Flash與JavaScript容器之間的通信過程,此處不贅述。現以在含有FLASH控制項的VS(VC)應用程序為例說明:


  容器訪問Flash控制項:


  A:flash代碼:


  //導入


  import flash.external.ExternalInterface;


  //回調聲明


  if (flash.external.ExternalInterface.available){


  ExternalInterface.addCallback("flashDoSth", null, flashDoSth);


  }


  //回調定義


  function flashDoSth(param:TYPE):TYPE{


  //do sth here;


  //return sth;


  }


  B:VS(VC)代碼:


  在需要FLASH執行上述定義的函數代碼段,寫入


  m_flash.CallFunction(strXML);


  //說明:


  m_flash即Flash控制項變數;


  strXML即為容器傳向Flash的數據,為XML類型字元串,在JS網頁中,數據直接傳輸使用,但在控制項容器如VS(VC)中,容器與控制項數據傳方式為:數據(VS/VC)----XML數據---數據(Flash)。


  一般的組織方式:


  容器向Flash傳遞數據為字元串"STR",strXML應該寫為:


  "<invoke name="flashDoSth" returntype="xml"><arguments><string>STR</string></arguments></invoke>"


  容器向Flash傳遞數據為數字222,strXML應該寫為:


  "<invoke name="flashDoSth" returntype="xml"><arguments><number>222</number></arguments></invoke>"


  容器向Flash傳遞數據為布爾,strXML應該寫為(以下方式之一):


  "<invoke name="flashDoSth" returntype="xml"><arguments><true/></arguments></invoke>"


  "<invoke name="flashDoSth" returntype="xml"><arguments><false/></arguments></invoke>"


  當然,以上這種寫法麻煩,現在網上有tinyxml,用起來很方便。可利用tynyxml封裝了一個類,用來VS(VC)向Flash傳遞數據或解析來自Flash的XML數據,包括稍複雜的數據,如數組(一維)、結構體等。大家如果經常用到數據傳輸,最好是封裝,不然太麻煩,且數據量太少。


  Flash訪問容器:


  A:flash代碼:


  //導入


  import flash.external.ExternalInterface;


  //向VS(VC)提出調用請求:


  if (flash.external.ExternalInterface.available){


  if (String(ExternalInterface.call("itemType", 數據)) != "OK") {


  //容器收到成功后,此處繼續其它處理


  }


  }


  //說明:上述代碼中「數據」可以為Flash中任意數據類型,包括Object.


  "itemType"用於在容器程序OnFlashCall..()中判別來自於Flash中不同的請求。


  B:VS(VC)中代碼,同樣,容器中將收到的數據為xml格式,必須提取有效數據; 


  //添加以下事件響應


  void OnFlashCall..(LPCTSTR request)


  {


  //解析request(xml數據字元串),獲得"itemType"及數據


  //根據"itemType"分類,處理數據,數據處理成功{


  m_examAdmin.SetReturnValue("<string>OK</string>");


  }


  }


  關於call()方法,解析過程依然是利用訪問鏈式結構,獲得相應數據。

上一篇[extern「c」]    下一篇 [王早來]

相關評論

同義詞:暫無同義詞