轉帖|其它|編輯:郝浩|2008-07-16 11:32:35.000|閱讀 739 次
概述:jacob中的QueryInterface()方法
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
最近由于自動化測試中要用到OCX控件,所以一直在關注有關的內容。學起來才深刻體會到,盡管只是用RFT去調用OCX控件的方法,也有很多的問題需要解決。今天接觸了一個jacob的函數:QueryInterface,費了2個小時才弄明白怎么用,唉……。
要使用QueryInterface(),就必須知道iid,我理解的IID就是OCX中接口(interface )的GUID,全球唯一標識,它的調用形式如下:
import com.jacob.com.*;
import com.jacob.activeX.*;
Dispatch events = comx.QueryInterface("{E2A3CC4A-DEF3-4272-9876-02BB032801C7}");
大家要注意的是,如果你獲得的iid是E2A3CC4A-DEF3-4272-9876-02BB032801C7,那么在 QueryInterface中調用時必須用{}括起來。我就是一直沒弄明白這一點,費了我好大的勁。
接下來再說說iid的獲取,這也是曾經困擾我的地方。IID的概念很多教程說的都很清楚,GUID嘛,但是IID如何獲取卻很少有人說,正所謂越簡單的道理說的人越少吧。
我獲取IID的方法是用oleview工具。這個工具可以方便的查看OCX內部的屬性和方法。我這里就不提供下載地址了,網上一搜一大堆。
查看OCX的方法是:首先打開OLEVIEW,點擊菜單欄中的“File—View Typelib”,在文件對話框中選擇你OCX文件,然后點擊“打開”按鈕。這樣就OCX的屬性和方法就出現在你面前了。IID就在其中。在OLEVIEW中找到如下格式的語句:
[
odl,
uuid(00020420-0000-0000-C000-000000000046),
version(1.0),
helpstring("AAAAAA"),
dual,
oleautomation
]
interface XXXXX : IDispatch
由于這個OCX是公司的控件,因此關鍵信息還是做了一些修改。大家看到uuid后面的那串數字了嗎?教程說它叫GUID,其實就是我們要找到IID!熟悉COM編程的人可能一眼就看出來了,但是對于我這種半路出家的門外漢卻是找了半天。接下來我們就可以象這樣使用了:
Dispatch comx = (Dispatch)com.getObject();
Dispatch events = comx.QueryInterface("{00020420-0000-0000-C000-000000000046}");
最后討論一下那對花括號,一開始我怎么也弄不明白為什么要加上花括號,后來一看注冊表才知道的。大家可以看看自己注冊表中的如下鍵值:HKEY_CLASSES_ROOT\JavaScript\CLSID,注意到了嗎?注冊表里該項的鍵值就是帶花括號的,我估計這就是在使用QueryInterface方法時,參數必須帶花括號的原因。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:中國IT實驗室