討論區快速選單
知識庫快速選單
寫程式老是卡卡?快進修Java最實用的技術 學會市占率最高的Android開發技術 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
COM 組件回調 javascript 的方法
更改我的閱讀文章字型大小
作者 : fancy(8086) 人氣指數超過10000點
[ 貼文 95 | 人氣 19471 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/2 上午 02:40:47
COM 的事件通知有2種:
1. callback interface 回調接口
2. event interface(connection point) 事件接口(連接點)

a.中文 http://www.microsoft.com/china/MSDN/library/archives/technic/develop/vb/0125i.asp
b.英文 http://msdn2.microsoft.com/en-us/library/ms809985.aspx
c. <COM本質論-潘愛民> p.298 雙向接口協議

察了一些資料 , 好像發現一些語言可以支持2種事件通知的方式 , 但是有些疑問想和大家討論.

事件接口(連接點)

"javascript":
var obj = new ActiveXObject("...");
obj.AttachEvent("..."); // IConnectionPoint::Advise
obj.DetachEvent("..."); // IConnectionPoint::Unadvise

VB:
WithEvent 宣告. "http://www.microsoft.com/china/MSDN/library/windev/
COMponentdev/cdconnpointstoc.mspx?mfr=true"

 

回調接口

VB: http://www.microsoft.com/china/MSDN/library/windev/COMponentdev/
cdconnpointstoc.mspx?mfr=true 提到 =>
" 对于早期绑定 COM 对象,Visual Basic 可以使用服务器组件类型库来决定服务器可
以启动的事件及其参数。
如果服务器是 ActiveX 控件以及简单 COM 组件,也可以使用类似机制。只需把 ActiveX
控件添加到项目,将其放置到窗体,并在 Procedure 框中选择希望截获的事件即可。
对于 ActiveX 控件,服务器组件(控件)始终在客户端容器的进程内运行,这样开销相对比较低。
您会看到,处理事件的这两种方式(使用连接点的 COM 服务器和早期绑定 ActiveX 控件)都很容易,
而且开销很小。但是处理后期绑定 COM 对象的事件会怎样呢?首先讨论两种可能的事件处理解决方案。"

不知上面這裡說的是不是就是使用回調接口 ? 小弟對 VB 使用不熟~~

"javascript": http://www.1to2.us/COM-JavaScript-a159169.htm

此鏈結的文章最後提到 "该技术和连接点、事件无关。" 且看它的調用過程很類似回調接口 ,
但是這裡有個疑問 , 腳本引擎如何找出實作 Advise 和 Unadvise 的接口 , 不然要怎麼把
VARIANT 此變量裡的 IDispatch 接口傳遞到 COM 組件中 ?

謝謝大家的答覆~~

作者 : fancy(8086) 人氣指數超過10000點
[ 貼文 95 | 人氣 19471 | 評價 0 | 評價/貼文 0 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/2 上午 09:23:04
javascript 使用回調接口的方式 , 我"似乎"有底了.

文中的 CA:: longCalc () 就是類似
IConnectionPoint::Advise , 當javascript 呼叫發生在
跨套間/跨進程/跨機器時 , 腳本引擎列集 longCalc()的參數 ,
其中 VARIANT 含有 IDispatch 接口指針 , 故會在
腳本引擎中產生 stub , 當請求數據包送到組件服務端時
再散集 longCalc() 的參數 , 產生 proxy.

那麼 , 是否使用此方式 , 必須利用 VARIANT 來包裝
IDispatch 接口 , 因為當調用
objA.longCalc(100, 200,scfDisplayProgress);
腳本引擎會將 scfDisplayProgress 函數包裝成
VARIANT 型態 , 不知我的
猜測對嗎 ? :)
 板主 : 徵求中
 > COM/DCOM - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - COM/DCOM - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
COM/DCOM
1 估得 490 
2 nick 120 
3 PLAYER 110 
4 天雲 100 
5 Raynor 80 
6 青衫 60 
7 60 
8 Peter.huang 50 
9 酷小毅 50 
10 Giant 50 
COM/DCOM
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2017 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0234375