我在用
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
当本机函数从未更改且应该始终被找到时。这里可能存在什么问题?如何解决它,使其始终像应该的那样工作?