首页 > 解决方案 > JNA 中的 Oleacc dll 支持

问题描述

我正在尝试使用 JNA 库为AccessibleObjectFromWindow我正在处理的 Java 项目调用 Oleacc dll 的方法。

我浏览了 JNA 文档并在线搜索了一个示例,但找不到AccessibleObjectFromWindow在 JNA 中使用 Oleacc dll 的良好参考。

有人可以在 JNA 库方面有良好的背景,请确认 JNA 是否包含 Oleacc dll 的功能?

如果没有任何从 Java 程序中使用 Oleacc dll 的替代方法,我们也非常感谢。

谢谢..!

标签: javawinapijava-native-interfacejna

解决方案


当您问“JNA 包括”这个问题时,指出 JNA 项目有两个部分会很有帮助。有jna包含核心功能的jna-platform工件,以及包含用户提交的用于各种平台的 JNA 映射的工件。我强调“用户提交”,因为 JNA 是一个社区维护的项目,而“JNA 在其平台库映射中缺少函数 XXX”的常见问题解答是“不,不是,它只是在等你添加它 :)” .

Oleacc dll 就是这些实例之一。它还没有在jna-platform工件中,但如果用户提交了它可能会出现。例如,请参阅2015 年的一位用户自己映射了这个库,但没有将其贡献给社区,所以 5 年后你在这里重现了这一努力!如果您在该 JNA 问题中向下滚动,您会看到一些实现您的方法的示例代码和其他一些代码,如果您能为 JNA 做出贡献,那就太好了!

同时,当映射不在 JNA 中时,上面的 FAQ 链接提供了如何实现它的模板。在您的特定情况下,AccessibleObjectFromWindow您可以在自己的项目中轻松实现代码。使用以下内容创建一个 Oleacc 类:

public interface Oleacc extends StdCallLibrary, WinUser, WinNT {

    Oleacc INSTANCE = (Oleacc) Native.loadLibrary("oleacc", Oleacc.class, W32APIOptions.DEFAULT_OPTIONS);

    HRESULT AccessibleObjectFromWindow(HWND win, int objID, Guid.REFIID iid, PointerByReference ptr);
}

你完成了!那么 JNA 中的映射还存在吗?不,但希望在您实现它并测试您的代码之后,您可以将您的映射贡献给项目,以便下一个需要这样做的人可以在 JNA 中找到它!


推荐阅读