我正在尝试访问我的java客户端中由本机代码创建的全局事件。我正在使用JNA来调用kernel32.dll的OpenEvent方法。但该方法始终返回NULL并且GetLastError返回2,即找不到文件。
所以我想知道JVM是否可以看到这些全局事件,如果有,我还可以使用其他方法吗?
- Vinzy
答案 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,那么获取对事件的引用应该没有任何问题,罪魁祸首就在其他地方。
在任何情况下,更多的代码都会很好。