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

java可以访问使用CreateEvent创建的全局事件吗,java,winapi,jna,Java,Winapi,Jna,我正在尝试访问由java客户端中的本机代码创建的全局事件。为此,我使用JNA调用kernel32.dll的OpenEvent方法。但是该方法总是返回NULL,GetLastError返回2,这是找不到的文件 所以我想知道JVM是否可以看到这些全局事件,如果可以,还有其他方法可以使用吗 -- Vinzy你如何称呼你的openEvent 我想是这样的 int result = kernel32.OpenEvent( 10000, false, "Global\\nameOfEvent" ); //r

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

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

--
Vinzy

你如何称呼你的openEvent

我想是这样的

int result = kernel32.OpenEvent( 10000, false, "Global\\nameOfEvent" ); //request for deletion
唯一不同的是,您可能使用对象作为参数,我想这是一个偏好问题

如果你提供电话的代码,我们也许能帮你。需要询问的另一件事是,是否在本机代码的某个地方调用CreateEvent。如果深入研究Windows API,您会注意到:

“只有在某些情况下,函数才会成功 进程已创建该事件 通过使用CreateEvent函数。”

资料来源:

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

干杯

总而言之:

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

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

在任何情况下,多一点代码都很好。

可能会有所帮助