【发布时间】:2011-01-24 17:30:18
【问题描述】:
我正在尝试使用 JNA 调用 kernel32.dll 的 OpenEvent,但失败并出现错误
java.lang.UnsatisfiedLinkError: 查找函数“OpenEvent”时出错:找不到指定的过程。
我的存根声明如下所示
public static native Pointer OpenEvent(int access, boolean inheritHandle, String name);
有人可以帮我找出这里的问题吗?
-- 根据用户反馈进行修改后,我现在没有收到错误;但 OpenEvent 方法总是返回 null。这是演示行为的代码
/** * 你好世界! * */
导入 com.sun.jna.FromNativeContext; 导入 com.sun.jna.Native; 导入 com.sun.jna.Pointer; 导入com.sun.jna.PointerType;
公共类应用 { 静止的 { Native.register("kernel32"); }
public static native HANDLE OpenEventW(int access, boolean inheritHandle,
String name);
public static native HANDLE CreateEventW(Pointer securityAttributes,
boolean manualReset, boolean initialState, String name);
public static native int GetLastError();
public static void main( String[] args )
{
HANDLE i = CreateEventW(null,false,false,"Global\\testEvent");
System.out.println("After create event:"+GetLastError());
HANDLE j = OpenEventW(100000, false, "Global\\testEvent");
System.out.println("After open event:"+GetLastError());
}
public static class HANDLE extends PointerType {
public Object fromNative(Object nativeValue, FromNativeContext context) {
Object o = super.fromNative(nativeValue, context);
if (INVALID_HANDLE_VALUE.equals(o))
return INVALID_HANDLE_VALUE;
return o;
}
}
static HANDLE INVALID_HANDLE_VALUE = new HANDLE() {
{ super.setPointer(Pointer.createConstant(-1)); }
public void setPointer(Pointer p) {
throw new UnsupportedOperationException("Immutable reference");
}
};
}
【问题讨论】:
-
您是否通过JNA成功访问其他功能?您能否提供一个如何初始化实例的示例?