使用 Java/COM 進行 ADSI 程式設計

使用適用於 Java 的 Microsoft 虛擬機(Microsoft VM)和 Microsoft Java 編譯程式,您可以從 Java/COM 應用程式存取透過任何 ADSI COM 元件公開的所有 ADSI 功能。 下列 Java 程式代碼範例顯示系結至 ADSI 物件並叫用該物件上方法所需的元素。 必要的 ADSI API 函式和物件方法會透過Activeds.dll公開。

import activeds.*;       // ADSI COM Wrapper classes
import com.ms.com.*;     // to use _Guid data type in COM.

public Class SimpleADSI 
{
    IADs obj;
    String path = "WinNT://domain/machine,computer";
    _Guid riid = IADs.iid;
    public static void main(String args[]) 
    {
        try 
        {
            obj = (IADs)ADsGetObject(path, riid);
            System.out.println( "Object name:  " + obj.getName() );
            System.out.println( "      class:  " + obj.getSchema() );
            System.out.println( "    ADsPath:  " + obj.getADsPath() );
            System.out.println( "     parent:  " + obj.getParent() );
        }
        catch (Exception e) 
        {
            System.out.println( "SimpleADSI Error: " + e.toString() );
        }
    }

    /** @dll.import("activeds", ole) */
    private static native IUnknown ADsGetObject(String path, _Guid riid);
}

第一個 import 語句中的自變數是指封裝在 Activeds.dll 中的 Java 包裝函式類別。 依照下列程式,使用 Visual J++ 建立包裝函式類別,並將其包含在專案中。

若要建立包裝函式類別,並將其包含在專案中

  1. 在 Visual J++ 專案中,從 [專案] 選單中選取 [新增 Com 包裝函式...]。
  2. [已安裝的元件]: 從 [COM 包裝函式] 對話框中選取 [使用中的DS 類型連結庫]。 如果類型庫未顯示在清單框中,請按兩下 [流覽... ] 按鈕,流覽至儲存 Activeds.tlb 的目錄,然後選取類型庫。

Visual J++ 會建立 Java 包裝函式類別的 Activeds 套件,並將套件包含在專案的預設路徑中。 如需詳細資訊,請參閱 Visual J++ 視窗的 [專案探索 ] 窗格中的 Activeds 套件。

若要取得無法共同建立的 ADSI 物件,請使用其中一個公開的 ADSI API 函式,例如 ADsGetObject 或 ADsOpenObject,這些函式也會封裝在Activeds.dll中。 Microsoft J/Direct 提供這些和其他原生 API 的存取權。 上述程式代碼範例的最後兩行會說明這一點。

編譯時,請確定已啟用 Microsoft 語言延伸模組。 若要這樣做,請從 [Visual J++ 專案] 視窗中的 [專案] 功能選取< [項目>屬性...]。 然後,按兩下 [項目>內容] 對話框中的< [編譯] 索引標籤。 清除 [ 停用 Microsoft 語言延伸模組 ] 複選框。 如果從命令行編譯,請使用 「/x-」 參數,例如:

jvc /x- SimpleADSI.java

最後,為了讓虛擬機載入 COM 元件,必須在系統路徑上顯示動態連結庫 (DLL)。 如果傳回 「java.lang.UnsatisfiedLinkError」 錯誤,請將 PATH 設定為包含所需 DLL 的路徑。 例如,如果在 c:\adsi\lib 中安裝Activeds.dll,請從命令行發出下列命令:

set PATH = %PATH%;c:\adsi\lib