jacob中的QueryInterface()方法

來源:互聯網
上載者:User

最近由於自動化測試中要用到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方法時,參數必須帶花括弧的原因(個人意見,僅供參考)

把這篇文章寫出來是為了和大家分享一下心得,畢竟沒有哪個高手是一天就練成的。同時我也希望瞭解一下大家在使用JACOB中的問題,這也是一個不錯的學習機會。

這裡提供一篇參考文檔,是講關於COM的,我覺的挺不錯的:

http://dev.rdxx.com/VC/VCCOM/2005-7/20/002311305_2.shtml

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.