使用 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++ 创建封装类并将其包含在项目中。
创建封装类并将其包含在项目中
- 在 Visual J++ 项目中,从“项目”菜单中选择“添加 Com 包装器...”。
- 从“COM 包装器”对话框的“已安装组件”中选择“活动 DS 类型库”。 如果类型库未显示在列表框中,请单击“浏览...”按钮,导航到存放 Activeds.tlb 的目录,然后选择类型库。
Visual J++ 会为 Java 封装类创建 activeds 包,并将该包纳入项目的默认路径中。 有关详细信息,请参阅 Visual J++ 窗口“项目浏览”窗格中的 activeds 包。
要获取无法协同创建的 ADSI 对象,请使用其中一个已公开的 ADSI API 函数,例如 ADsGetObject 或 ADsOpenObject,这些函数也打包在 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