Java JNA本机代码有时会失败,错误代码为127:“;找不到指定的程序";

Java JNA本机代码有时会失败,错误代码为127:“;找不到指定的程序";,java,winapi,dll,jna,kernel-module,Java,Winapi,Dll,Jna,Kernel Module,我正在使用调用本机代码。这在大多数情况下都有效,但有时我会遇到以下例外情况: java.lang.IllegalStateException: 127: The specified procedure could not be found. 通常这种异常会在第一次调用它时发生。如果调用成功,则只要Java程序运行,以下所有调用都将成功 例如,我的代码如下所示: boolean succeeded = MY_KERNEL_32.DebugSetProcessKillOnExit(false);

我正在使用调用本机代码。这在大多数情况下都有效,但有时我会遇到以下例外情况:

java.lang.IllegalStateException: 127: The specified procedure could not be found.
通常这种异常会在第一次调用它时发生。如果调用成功,则只要
Java
程序运行,以下所有调用都将成功

例如,我的代码如下所示:

boolean succeeded = MY_KERNEL_32.DebugSetProcessKillOnExit(false);
if (!succeeded)
{
    checkForKernelError();
}
checkforkernelrror()
的定义如下:

private static void checkForKernelError()
{
    int lastErrorCode = MY_KERNEL_32.GetLastError();

    if (lastErrorCode != 0)
    {
        String lastErrorMessage = formatMessage(lastErrorCode);
        String errorMessage = lastErrorCode + ": " + lastErrorMessage;
        throw new IllegalStateException(errorMessage);
    }
}

其思想是结合运行在
Windows
上的其他进程调用
windowsapi
本机代码,并始终声明它随后成功。但是为什么我有时会得到
当本机函数从未更改并且应该始终被找到时,指定的过程找不到
。这里可能存在什么问题?如何解决它,使其始终像应该的那样工作?

请确认,Windows库(如您提到的Kernel32)是否真的会出现此错误?在什么情况下会发生错误?多久?你能给出一个完整的最小可复制片段吗?如何加载库?此外,请使用
Native.getLastError()
。JNA存储错误代码。如果你调用了你自己映射过的<代码> GETLASTReNORR()/Cux>,中间可能会有其他的底层系统调用给你错误的状态代码。但是JNA确实在工件中提供了一些现成的映射。您是在Oracle虚拟机上运行还是在Excelsior JET之类的设备上运行?@cubrr:我在Oracle虚拟机上运行,我将尝试使用
Native.getLastError()
,听起来似乎可以工作。:)因为它是随机发生的,所以很难做出一个可复制的例子。