java - JACOB (Java/COM/ActiveX) - 如何解决事件处理问题?

标签 java com activex jacob

我正在尝试使用 JACOB 与 COM 对象交互。

我能够调用对象的初始化方法(并获取其属性),但没有获取任何事件。代码引用如下。
我有一个示例 HTML+Javascript 页面(在 IE 中运行),它成功接收来自同一对象的事件。
我正在考虑以下选项,但希望有任何具体的故障排除想法......

  • 将我的 Java 程序发送给开发 COM 对象的团队,并获得 他们寻找任何可疑的东西(该对象是否有办法知道是否有客户端正在监听其事件,以及它们是否已成功传递?)

  • 进入 JACOB 的 native 部分并尝试在那一侧进行调试。这有点可怕,因为我的 C++ 还很生疏,而且我从来没有为 Windows 编程过。

public static void main(String[] args) {
    try {
        ActiveXComponent c = new ActiveXComponent(
                              "CLSID:{********-****-****-****-************}"); // My object's clsid
        if (c != null) {
            System.out.println("Version:"+c.getProperty("Version"));
            InvocationProxy proxy = new InvocationProxy() {                 
                @Override
                public Variant invoke(String methodName, Variant[] targetParameters) {
                    System.out.println("*** Event ***: " + methodName);
                    return null;
                }
            };
            DispatchEvents de = new DispatchEvents((Dispatch) c.getObject(), proxy);
            c.invoke("Init", new Variant[] {
                    new Variant(10), //param1
                    new Variant(2), //param2
                     });
            System.out.println("Wating for events ...");
            Thread.sleep(60000); // 60 seconds is long enough
            System.out.println("Cleaning up ...");
            c.safeRelease();
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        ComThread.Release();
    }
}

最佳答案

这是我的具体问题的解决方案:

事实证明,COM 对象被编写为不可见的 ActiveX 控件,假定它在窗口上下文中运行。这是我给组件开发团队提供基于 JACOB 的程序后“发现”的。

JACOB 似乎没有提供窗口上下文。

我们案例中的解决方案是摆脱 COM(并使用 JNA 直接调用 native DLL 中的 C 函数)。

关于java - JACOB (Java/COM/ActiveX) - 如何解决事件处理问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2756776/

相关文章:

java - Spring xml ioc 比 Java 实例化有什么好处?

java - 如何在 Java 中关闭隐式流?

c# - 用 C# 编写的托管 OleDB 提供程序

powershell - PowerExplorer.Application com对象和Windows 2012 in Powershell

c# - 如何使用证书签署 ActiveX DLL

excel - 在 Qt 中格式化 Excel 文档

javascript - 使用 activexobject 处理文件夹

java - @joinColumn name 属性对于 ManyToOne 关系是必需的吗?

java - 将Java连接到MySQL数据库

com - OneNote 2013 加载项无法加载。如何调试?