我编写了以下类来包装win32事件对象的创建
import com.sun.jna.*;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.*;
import com.sun.jna.platform.win32.Kernel32;
/**
* Wraps a (newly-created) native win32 event object and allows you to signal it.
*
* The created event object is manual-reset and is initially un-set.
*/
public final class Win32Event
{
private static final Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("Kernel32", Kernel32.class);
private WinNT.HANDLE m_handle = null;
public Win32Event(String in_eventName)
{
assert null != in_eventName;
m_handle = INSTANCE.CreateEvent(null, true, false, in_eventName);
assert !Pointer.NULL.equals(m_handle.getPointer());
}
public void signal()
{
assert isValid();
INSTANCE.SetEvent(m_handle);
}
/**
* @return True if the event handle hasn't been freed with free().
*/
public boolean isValid()
{
return null != m_handle;
}
/**
* Frees the wrapped event handle. This must be done to prevent handle leaks.
*/
public void free()
{
if (isValid())
{
INSTANCE.CloseHandle(m_handle);
m_handle = null;
}
}
@Override
protected void finalize()
{
free();
}
}
我在Windows7机器上使用JNA3.3,当我试图创建这个类的实例时,我得到了以下堆栈跟踪。
线程“main”java.lang.UnsatifiedLinkError中出现异常:查找函数“CreateEvent”时出错:找不到指定的过程。
我将代码从执行instance.[method]
改为使用kernel32.instance.[method]
。
我通过查看kernel32的定义并注意到它有一个静态实例变量来解决这个问题。
问题内容: 我花了很多时间试图在Java应用程序中使用C#函数,但是没有成功…我在C#中编写了以下lib: 这个dll调用了另一个dll来进行一些操作,但是当我对其进行编译时,我可以在Realse文件夹中找到Dll,并且一切似乎都还可以,所以我使用32bit,64bit和Any CPU选项对其进行了编译,以确保它不是我的问题。 使用32位Dependency Walker 和任何CPU选项分析我的
问题内容: 如何从Java处理内存?我知道Java在它自己的JVM中运行,因此它不能直接访问进程内存。 我听说过JNA,可用于获取操作系统和Java代码之间的接口。 假设我要操纵纸牌得分。尝试将是这样的: 得到纸牌的过程 获得对单人纸牌的记忆 找出分数存储在存储器中的位置 在地址中写下我的新值 Java本身无法访问该内存,那么如何使用JNA做到这一点? 问题答案: 您需要使用JNA库。下载两个Ja
我在使用JNA的java中使用dll,但我得到以下错误 线程“main”java中出现异常。lang.UnsatifiedLinkError:查找函数“GetStatus”时出错:找不到指定的过程。 不知道如何解决此问题? 请帮忙。 这是java代码
目前,我正试图使用JNA将非Java应用程序设置为焦点,我发现了以下代码。 我还将以下依赖项放入我的pom.xml,该项目是一个只有主文件的新项目。 这是我们的程序入口点: 理论上,在编译/运行时,程序应该只关注运行时打开的谷歌Chrome。 然而,Java给出了以下错误消息: 对于这个问题,我找到的唯一参考是使用JNA User32平台映射的NoSuchMethodError 这几乎是相同的错误
我目前正在做一个项目,需要开发一个原生DLL(用C++)来访问Java应用程序。我选择了JNA来做桥接工作,我面临着从Java向C++函数传递正确的int值的问题。 简单地说,我有一个函数在C++中接受一个int值作为参数:(代码被剥离,方法被重命名以保持机密性) 是一种简单的方法,它使用将任何数据类型的值转换为。执行情况如下: 是从我在代码中使用的实际结构重命名的。是的数组。和都是共享内存中的全
问题内容: 我完全没有使用Windows API的经验,所以请原谅我的无知。 我想删除文件到回收站。如何使用JNA做到这一点,以及如何检测是否不可能(例如,由于文件位于网络共享上)? 问题答案: 使用已定义和方法的。