我有一个
Java Native Access的问题:我有一个带有一个函数的C库,让我们说foo().这个函数有一个内存 – 一个计数器 – 每次调用都会增加.是否可以在同一个java进程中创建此库的两个实例,以便计数器是独立的?
非常感谢你.
这是一些代码:
public class A
{
public static class Lib
{
NativeLibrary libInstance = NativeLibrary.getInstance("myLibrary");
Function fn = lib.getFunction("foo");
}
private Lib lib = new Lib();
public foo()
{
lib.fn.invoke(new Object[] {});
}
}
如果我打电话:
A a = new A();
A b = new A();
a.foo(); // >1
a.foo(); // >2
b.foo(); // >3
a.foo(); // >4
b.foo(); // >5
a.foo(); // >6
但我想让a和b独立于图书馆工作:
a.foo(); // >1
a.foo(); // >2
b.foo(); // >1
a.foo(); // >3
b.foo(); // >2
a.foo(); // >4
非常感谢
这是我尝试创建lib实例的方法:
public class DriverLib
{
private static int counter = 1;
NativeLibrary lib;
Function stepAction;
Function initialize;
Function terminate;
Pointer input;
Pointer output;
public DriverLib()
{
// create options
HashMap options = new HashMap<>();
options.put(Library.OPTION_OPEN_FLAGS, new Integer(counter++));
lib = NativeLibrary.getInstance("mylib_win64", options);
stepAction = lib.getFunction("step");
initialize = lib.getFunction("initialize");
terminate = lib.getFunction("terminate");
input = lib.getGlobalVariableAddress("model_U");
output = lib.getGlobalVariableAddress("model_Y");
}
}