从多个 类 访问单个 DLL
Access single DLL from multiple classes
我对 Java 比较陌生,因此对 JNI 和 C++ 也很陌生。是否可以通过多个 classes 访问同一个动态库?例如,如果在我的 C++ 中,我有一个 class,它又有两个 children classes,我是否能够访问 child classes 来自两个 Java classes?
例如,在foo.h中:
class Controller {
public:
class A {
public:
int someMethod();
}
class B {
public:
int someOtherMethod();
}
}
并在 A.java 中:
class A {
static {
System.loadLibrary("foo");
}
public native int someMethod();
}
与 B.java:
class B {
static {
System.loadLibrary("foo");
}
public native int someOtherMethod();
}
这可能吗?如果是这样,我该怎么做?
类?是的。实例?是的(但是否共享它们取决于您,如果您使用多线程,并假设它们不可重入,则您需要同步访问)。
在 C++ 中,您正在访问 DLL 中的函数,而不是 classes 的真正实例。
您可以从 class 方法内部或独立函数中调用外部函数,无论它们位于 DLL、共享库还是其他翻译单元中。
所以,是的,您可以访问其他 classes 的方法,前提是它们具有 public 可访问性并且在使用这些方法之前有可用的声明(原型)。
我对 Java 比较陌生,因此对 JNI 和 C++ 也很陌生。是否可以通过多个 classes 访问同一个动态库?例如,如果在我的 C++ 中,我有一个 class,它又有两个 children classes,我是否能够访问 child classes 来自两个 Java classes?
例如,在foo.h中:
class Controller {
public:
class A {
public:
int someMethod();
}
class B {
public:
int someOtherMethod();
}
}
并在 A.java 中:
class A {
static {
System.loadLibrary("foo");
}
public native int someMethod();
}
与 B.java:
class B {
static {
System.loadLibrary("foo");
}
public native int someOtherMethod();
}
这可能吗?如果是这样,我该怎么做?
类?是的。实例?是的(但是否共享它们取决于您,如果您使用多线程,并假设它们不可重入,则您需要同步访问)。
在 C++ 中,您正在访问 DLL 中的函数,而不是 classes 的真正实例。
您可以从 class 方法内部或独立函数中调用外部函数,无论它们位于 DLL、共享库还是其他翻译单元中。
所以,是的,您可以访问其他 classes 的方法,前提是它们具有 public 可访问性并且在使用这些方法之前有可用的声明(原型)。