Flex與Win32通訊例項之ExternalInterface
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(); } }
首先,需要在專案中嵌入Flash player外掛,網上有很多例子。另外Flex也要寫好程式碼,這裡略掉。
- 新增一個ExternalInterface的事件處理函式,對於Flash player來講就是FlashCall事件(跟FSCommand不同的),這裡的事件處理函式是void CMyBicapDlg::OnFlashCallShockwaveflash1(LPCTSTR request)。沒有返回值(下面會講到),引數是一個XML格式的字串。格式是"<invoke name='%s' returntype='xml'><arguments><string>%s</string></arguments></invoke>",去查查幫助就知道了。
- 處理request:標準C++沒有處理XML的庫,我去下載了tinyxml,小巧好用。下面就是按照個人需要處理request了,我這裡是,開啟一個資料夾選擇對話方塊然後選擇一個路徑。
- 返回值。事件處理函式是沒有返回值的,但是flash player提供了一個方法:m_FlashPlayer.SetReturnValue(re_value.c_str());,專門傳遞返回值,格式是<string>%s</string>(也可以是別的AS結構,具體看幫助)。
需要提醒的是,在處理期間要block掉Flex,ExternalInterface.call是有返回值的,如果不阻塞Flex,可能返回就是NULL,呵呵,不知道深層原因。另外,反過來呼叫格式也是一樣的。
除錯環境:win xp, VC++6.0, Flex builder 2.0
相關推薦
Flex與Win32通訊例項之ExternalInterface
專案中要實現Flex開啟資料夾選擇框(Flex做為桌面程式的UI),沒辦法,如果不用AIR只能在下面加一層Container了。網上搜來搜去差不多都是講FSCommand怎樣與VC++互動,可是FSCommand不能及時
Android 元件之Fragment與Activity通訊小述
一、概述 本節主要介紹一下Fragment與Activity的互動方式,當然方法肯定並不是唯一的,我在這裡只是將自己平時的思路記錄一下,算是拋磚引玉 二、Fragment接收Activity傳遞的資料 我們想從Fragment內獲取它的託管Activity中的資料,這種情況我
EDI與其他通訊手段的不同之處?
對於剛開始接觸EDI的童鞋們來說,不太理解EDI與現有的一些通訊手段,如傳真、電子信箱(Email)等有什麼不同之處? 具體區別是什麼? EDI傳輸的是格式化標準檔案,並具有格式校驗功能,而傳真和電子郵箱等傳送的是自由格式的檔案; EDI實現的是兩個企業之間業務系統資料的自
Hadoop之RPC通訊例項
一:RPC(remote procedure call) 不同Java程序間的物件方法的呼叫 一方稱作服務端(server),一方稱作客戶端(client) server端提供物件,供客戶端呼叫的,被呼叫的物件的方法的執行發生在server端 RPC是hadoop框架執行的基礎
IO流學習筆記(二)之BufferedWriter與BufferedReader及例項Demo
在之前的學習筆記(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter與FileReader的Demo使用的中轉資料buf實際就是緩衝區,是由我們自己建立的。 緩衝區可以提高效率,Java對緩衝區進行了封裝,封裝成了物
Vue之父子元件間通訊例項講解(props、$ref、$emit)
元件是 vue.js 最強大的功能之一,而元件例項的作用域是相互獨立的,這就意味著不同元件之間的資料無法相互引用。那麼元件間如何通訊,也就成為了vue中重點知識了。這篇文章將會通過props、$ref和 $emit 這幾個知識點,來講解如何實現父子元件間通訊。 在說如何實現通訊
資料倉庫與資料探勘之Apriori演算法例項
最近剛上了資料探勘這門課,老師講了兩個演算法,即Apriori演算法和FP-growth演算法,然後佈置了上機作業,挖掘一個有8萬行的記錄的retail.dat,需要從中找出強規則,即同時滿足最小支援度和最小置信度的規則。 Apriori演算法 在這裡給出一個實現找出所有頻繁模式集的
網路通訊基礎之檢錯與糾錯
二維奇偶校驗 迴圈冗餘校驗(CRC) 是一種通過多項式除法檢測錯誤的方法,將每個位元串看作一個多項式,採用模2運算。通常它將位元串:bn-1bn-2bn-3 … b2b1b0解釋成多項式:bn-1xn-1 + bn-2xn-2 + bn-3xn-3 + … + b2x2 + b1x1
EDI是什麼?與其他通訊手段有什麼不同之處?
對於剛開始接觸EDI的童鞋們來說,不太理解EDI與現有的一些通訊手段,如傳真、電子信箱(Email)等有什麼不同之處? 具體區別是什麼? EDI傳輸的是格式化標準檔案,並具有格式校驗功能,而傳真和電子郵箱等傳送的是自由格式的檔案; EDI實現的是兩個企業之間業務系統資料的自
OpenLayers學習筆記(二)— QML與HTML通訊之畫圖
QML與 HTML通訊—實現QML中點選功能按鈕在地圖上畫圖 作者: 狐狸家的魚 Github: 八至 一、HTML-map var drarGraphic; var drawType;function
領域驅動設計之聚合與聚合根例項一(訂單)
通過一個例項來說明如何劃分聚合與聚合根 場景:一個下訂單的業務,一個訂單必須有相應的客戶資訊,訂單下有訂單項,每個訂單項必須有相應的產品資訊,產品有分類的資訊。 1.根據這個基本的需求,我們初步確定的實體、值物件與關聯關係為(這裡採用EF的Model First): 2.經過業務深入分析,以及聚合與聚合根
python子程序模組subprocess詳解與應用例項 之三
二、應用例項解析 2.1 subprocess模組的使用 1. subprocess.call subprocess.call([“ls”, “-l”]) 0 subprocess.call(“ex
python子程序模組subprocess詳解與應用例項 之二
1.2. Popen 物件 Popen類的例項有下列方法: 1. Popen.poll() 檢查子程序是否已經結束,設定並返回返回碼值。 2. Popen.wait() 等待子程序結束,設定並返回返回碼值。 WARNING: 當使用 stdout=P
Fragment學習之使用介面回撥的方式實現Fragment與Activity通訊
Fragment與Fragment之間可以進行資訊傳遞,同樣,Fragment與Activity也可以進行資訊的傳遞。 下面是一個演示在Activity中獲取來自Fragment的資訊,使用介面回撥的方法在Activity中接收資訊 MainActivity.java:
馳騁工作流引擎JFlow與activiti的對比之4種包含多例項的模式
無同步的多例項(MIwithout) 在流程中,一個活動可以啟用多個例項,每個例項相互獨立,並不需要在後面進行同步。 例子:比如使用者購買了N本書,於是後續的支付賬單、更新客戶可以以本書為單位各自執行。 ACTIVITI 中的支援情況: 支援這種模式,但是不允許在後面進行結束動
Qt 與 Html 通訊 之 QWebChannel
required QWebChannel文件 Header #include qmake: QT += webchannel Since: Qt 5.4 Inherits:
AIDL使用詳解(三) 客戶端通過AIDL與服務端通訊 例項專案
專案簡介 我們要實現一個計算器的功能。 首先實現一個服務端,用於提供計算服務,供客戶端去呼叫。它接受客戶端提供的兩個值,計算之後,返回兩個數之和。 第二,實現客戶端介面進行操作。 第三: 我們命名客戶端和服務端。 第四:定義AIDL,連線客戶
Java Socket實現客戶端與服務端通訊例項
首先,建立一個Server.java的伺服器端類package socket; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; impor
LDD3原始碼分析之與硬體通訊&中斷處理
作者:劉昊昱 編譯環境:Ubuntu 10.10 核心版本:2.6.32-38-generic-pae LDD3原始碼路徑:examples/short/ 本分析LDD3第9和第10章的示例程式碼short。short涉及的主要知識點有通過I/O埠或I/O記憶體操作裝
Android6.0之AMS通過socket與zygote通訊建立app程序
轉自:https://blog.csdn.net/love000520/article/details/70230784 前面分析到了ActivityStackSupervisor類中的startActivityUncheckedLocked方法,該方法主要是為要啟動的activity準備一個t