Java/COMを使用したADSIのプログラミング

Microsoft Virtual Machine for Java (Microsoft VM) とMicrosoft Java Compilerを使用すると、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);
}

最初のインポートステートメントの引数は、Activeds.dllにパッケージ化されたJavaラッパークラスを参照します。 Visual J++を使用してラッパークラスを作成し、次の手順に従ってプロジェクトに含めます。

ラッパークラスを作成し、プロジェクトに含めるには

  1. Visual J++ プロジェクトで、プロジェクト メニューから、コム・ラッパーの追加... を選択してください。
  2. COM Wrappersダイアログのインストールされているコンポーネント:から [Active DS Type Library ] を選択します。 タイプライブラリがリストボックスに表示されない場合は、参照...ボタンをクリックし、Activeds.tlbが格納されているディレクトリに移動して、タイプライブラリを選択します。

Visual J++は、Javaラッパークラスのactivedsパッケージを作成し、プロジェクトの既定のパスにパッケージを含めます。 詳細については、Visual J++ウィンドウの プロジェクト探索ウィンドウにあるactivedsパッケージを参照してください。

共同作成できないADSIオブジェクトを取得するには、公開されているADSI API関数 (ADsGetObjectADsOpenObjectなど) のいずれかを使用します。これらの関数は、Activeds.dllにもパッケージ化されています。 Microsoft J/Directは、これらのAPIやその他のネイティブAPIへのアクセスを提供します。 これは、上記のコード例の最後の2行で示されています。

コンパイルするときに、Microsoft言語拡張機能が有効になっていることを確認します。 これを行うには、Visual J++ プロジェクトウィンドウのプロジェクト メニューから <プロジェクト> プロパティ...を選択します。 そして、<プロジェクト> プロパティ ダイアログの コンパイル タブをクリックします。 Microsoft言語拡張機能を無効にする チェックボックスをオフにします。 コマンドラインからコンパイルする場合は、次のように"/x-"スイッチを使用します。

jvc/x-SimpleADSI.java

最後に、仮想マシンがCOMコンポーネントを読み込むためには、ダイナミックリンクライブラリ (DLL) がシステムパス上に表示されている必要があります。 "java.lang。UnsatisfiedLinkError"エラーが返された場合は、必要なDLLを含むパスを含むようにPATHを設定します。 たとえば、Activated.dllがc:\adsi\libにインストールされている場合は、コマンドラインから次のコマンドを発行します。

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