【问题标题】:Can java access global events created using CreateEventjava可以访问使用CreateEvent创建的全局事件吗
【发布时间】:2011-01-24 19:11:04
【问题描述】:

我正在尝试访问由我的 java 客户端中的本机代码创建的全局事件。为此,我使用 JNA 来调用 kernel32.dll 的 OpenEvent 方法。但是该方法总是返回 NULL 并且 GetLastError 返回 2,即 File not found。

所以我想知道 JVM 是否可以看到这些全局事件,如果可以,我可以使用其他方法吗?

-- 文兹

【问题讨论】:

  • this 可能会有所帮助

标签: java winapi jna


【解决方案1】:

如何称呼你的 openEvent?

我想是这样的

int result = kernel32.OpenEvent( 10000, false, "Global\\nameOfEvent" ); //request for deletion

唯一的区别是你可能使用对象作为参数,我想这是一个偏好问题。

如果您提供通话代码,我们或许可以为您提供帮助。要问的另一件事是,您是否在本机代码中的某个地方调用 CreateEvent。如果您深入研究 Windows API,您会注意到:

"函数只有在某些情况下才能成功 进程已经创建了事件 通过使用 CreateEvent 函数。”

来源:http://msdn.microsoft.com/en-us/library/ms684305(v=vs.85).aspx

在您的情况下,这意味着如果您不是创建活动的人,您将遇到很多麻烦。有一种方法可以获取您未创建的事件的句柄,但它有点复杂,让我们从您提供更多信息开始。

干杯。

总结一下:

如果您不在代码中的任何位置调用 CreateEvent,那么在调用 OpenEvent 时就会遇到麻烦。为了避免这个问题,您基本上必须找到哪个进程/线程持有事件的锁,并将其提供给您的线程(jvm)。

如果您确实在代码中调用了 CreateEvent,那么获取对您的事件的引用应该没有任何问题,而罪魁祸首在其他地方。

无论如何,多写一点代码就好了。

【讨论】:

    猜你喜欢
    • 2012-07-02
    • 2019-06-11
    • 2013-05-30
    • 2022-06-22
    • 2011-09-19
    • 2020-11-09
    • 2015-08-02
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多