从多个 类 访问单个 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 可访问性并且在使用这些方法之前有可用的声明(原型)。