使用 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 函数,例如 ADsGetObjectADsOpenObject,这些函数也打包在 Activeds.dll 中。 Microsoft J/Direct 提供对这些 API 和其他本机 API 的访问权限。 上面代码示例的最后两行就说明了这一点。

编译时,请确保已启用 Microsoft 语言扩展。 为此,请从 Visual J++ 项目窗口的“项目”菜单中选择“项目属性...”<>。 然后,单击“项目属性”对话框中的“编译”选项卡。<> 清除“禁用 Microsoft 语言扩展”复选框。 如果从命令行进行编译,请使用“/x-”开关,例如:

jvc /x- SimpleADSI.java

最后,为了让虚拟机加载 COM 组件,动态链接库 (DLL) 必须在系统路径上可见。 如果返回“java.lang.UnsatisfiedLinkError”错误,请将 PATH 设置为包含所需 DLL 的路径。 例如,如果 Activeds.dll 已安装在 c:\adsi\lib 中,请在命令行中发出以下命令:

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