最近由於自動化測試中要用到OCX控件所以一直在關注有關的內容學起來才深刻體會到盡管只是用RFT去調用OCX控件的方法也有很多的問題需要解決今天接觸了一個jacob的函數QueryInterface費了個小時才弄明白怎麼用唉……
要使用QueryInterface()就必須知道iid我理解的IID就是OCX中接口(interface )的GUID全球唯一標識它的調用形式如下
import *;
import comjacobactiveX*;
Dispatch events = comxQueryInterface({EACCADEFBBC});
大家要注意的是如果你獲得的iid是EACCADEFBBC那麼在 QueryInterface中調用時必須用{}括起來我就是一直沒弄明白這一點費了我好大的勁
接下來再說說iid的獲取這也是曾經困擾我的地方IID的概念很多教程說的都很清楚GUID嘛但是IID如何獲取卻很少有人說正所謂越簡單的道理說的人越少吧
我獲取IID的方法是用oleview工具這個工具可以方便的查看OCX內部的屬性和方法我這裡就不提供下載地址了網上一搜一大堆
查看OCX的方法是首先打開OLEVIEW點擊菜單欄中的File—View Typelib在文件對話框中選擇你OCX文件然後點擊打開按鈕這樣就OCX的屬性和方法就出現在你面前了IID就在其中在OLEVIEW中找到如下格式的語句
[
odl
uuid(C)
version()
helpstring(AAAAAA)
dual
oleautomation
]
interface XXXXX : IDispatch
由於這個OCX是公司的控件因此關鍵信息還是做了一些修改大家看到uuid後面的那串數字了嗎?教程說它叫GUID其實就是我們要找到IID!熟悉COM編程的人可能一眼就看出來了但是對於我這種半路出家的門外漢卻是找了半天接下來我們就可以象這樣使用了
Dispatch comx = (Dispatch)comgetObject();
Dispatch events = comxQueryInterface({C});
最後討論一下那對花括號一開始我怎麼也弄不明白為什麼要加上花括號後來一看注冊表才知道的大家可以看看自己注冊表中的如下鍵值HKEY_CLASSES_ROOT\JavaScript\CLSID注意到了嗎?注冊表裡該項的鍵值就是帶花括號的我估計這就是在使用QueryInterface方法時參數必須帶花括號的原因
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26129.html