gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:33:05 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com