Я использую 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
, когда нативная функция никогда не меняется и должна всегда найдаться. В чем здесь может быть проблема и как ее можно исправить, чтобы она работала согласованно, как и должна?