我正在使用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
。可能是这里的问题,如何解决它,使其始终如一地正常工作?