java可以访问使用CreateEvent创建的全局事件

时间:2011-01-24 19:11:05

标签: java winapi jna

我正在尝试访问我的java客户端中由本机代码创建的全局事件。我正在使用JNA来调用kernel32.dll的OpenEvent方法。但该方法始终返回NULL并且GetLastError返回2,即找不到文件。

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

- Vinzy

1 个答案:

答案 0 :(得分:0)

你如何调用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,那么获取对事件的引用应该没有任何问题,罪魁祸首就在其他地方。

在任何情况下,更多的代码都会很好。