我在我的Java应用程序中使用了各种Win32 API函数,我用它GetLastError来获取有关API调用失败的信息.
它大部分时间都有效,但现在我发现了一个似乎重置上一个错误的情况.
这是我在Java应用程序和VB6应用程序中所做的事情:
GetModuleFileNameEx给那个把柄.GetProcessImageFileName给那个把柄.现在两个 API函数都按预期失败(它们返回零),并且在我的VB6应用程序中,GetLastError在两个API调用之后返回87("无效参数").
但是在我的Java应用程序中,只有在GetModuleFileNameEx最后一个错误设置为87之后.GetProcessImageFileName它始终为零.
我该怎么办?
编辑:
以下是JNA声明:
public interface PsApi extends StdCallLibrary {
PsApi INSTANCE = (PsApi) Native.loadLibrary("psapi", PsApi.class,
W32APIOptions.UNICODE_OPTIONS);
int GetModuleFileNameEx(WinNT.HANDLE hProcess, WinDef.HMODULE hModule,
char[] lpFilename, int nSize);
int GetProcessImageFileName(WinNT.HANDLE hProcess, char[] lpImageFileName,
int nSize);
}
Run Code Online (Sandbox Code Playgroud)
和调用代码 GetProcessImageFileName
char[] buffer = new char[2048];
int result = PsApi.INSTANCE.GetProcessImageFileName(hProcess, buffer,
buffer.length);
if (result == 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
return new String(Arrays.copyOf(buffer, result));
Run Code Online (Sandbox Code Playgroud)
并为 GetModuleFileNameEx
char[] buffer = new char[2048];
int result = PsApi.INSTANCE.GetModuleFileNameEx(hProcess, hModule, buffer,
buffer.length);
if (result == 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
}
return new String(Arrays.copyOf(buffer, result));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3081 次 |
| 最近记录: |