【问题标题】:How do I call and initialize the Java Access Bridge API?如何调用和初始化 Java Access Bridge API?
【发布时间】:2015-10-27 22:16:34
【问题描述】:

Java Access Bridge API documentation 声明:

Java Access Bridge API 调用包含在AccessBridgeCalls.h 要使用它们,您还必须编译文件AccessBridgeCalls.c, 它充当您的应用程序和 WindowsAccessBridge.dll.

但是当我尝试从AccessBridgeCalls.hAccessBridgeCalls.c 创建一个dll 时,它说缺少AccessBridgeDebug.h 文件。

如何调用initiateAccessBridge() 方法?我希望执行类似于 JavaMonkey.exe 的任务,例如识别 Java Swing 应用程序中的组件。

当我从 Access Bridge 调用 isJavaWindow(int) 时,它总是为所有处理程序返回 false。

【问题讨论】:

  • 也许你正在使用调试构建,只构建版本,这样就不需要 AccessBridgeDebug.h
  • 你用什么语言称呼这座桥? (C、C++、Java)。您是如何创建 DLL 的?

标签: java java-access-bridge


【解决方案1】:

JAB 依赖于 Windows 消息传递机制来执行进程间通信。您必须设置一个线程来运行消息泵循环并在该线程中调用initiateAccessBridge(),否则某些方法如isJavaWindow() 将始终返回false

这是一个 C# 参考:

            var accessBridge = new AccessBridge();
            // Use WPF UI thread if there is one
            var messageLoopDispatcher = Application.Current?.Dispatcher;
            if (messageLoopDispatcher == null)
            {
                var readyEvent = new ManualResetEvent(false);
                var messageLoopThread = new Thread(() =>
                {
                    messageLoopDispatcher = Dispatcher.CurrentDispatcher;
                    readyEvent.Set();
                    Dispatcher.Run();
                });
                messageLoopThread.SetApartmentState(ApartmentState.STA);
                messageLoopThread.Start();
                readyEvent.WaitOne();
            }
            messageLoopDispatcher.Invoke(() =>
            {
                accessBridge.Initialize();
            });

【讨论】:

    猜你喜欢
    • 2017-10-16
    • 2013-10-04
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多