Собственный код JNA иногда завершается с ошибкой с кодом 127: «Указанная процедура не найдена» - PullRequest
0 голосов
/ 28 июня 2018

Я использую JNA для вызова собственного кода. Это работает большую часть времени, но иногда я получаю следующее исключение:

java.lang.IllegalStateException: 127: The specified procedure could not be found.

Обычно это исключение происходит при первом вызове, если оно вообще вызывается. Если вызов выполнен успешно, все последующие вызовы будут успешными, а также до тех пор, пока выполняется программа Java.

Например, мой код выглядит следующим образом:

boolean succeeded = MY_KERNEL_32.DebugSetProcessKillOnExit(false);
if (!succeeded)
{
    checkForKernelError();
}

checkForKernelError() определяется следующим образом:

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 API собственный код в сочетании с каким-либо другим процессом, выполняющимся на Windows, и всегда утверждать, что впоследствии он завершился успешно. Но почему я иногда получаю The specified procedure could not be found, когда нативная функция никогда не меняется и должна всегда найдаться. В чем здесь может быть проблема и как ее можно исправить, чтобы она работала согласованно, как и должна?

...