从多个类访问单个DLL

时间:2015-01-29 23:37:31

标签: java c++ java-native-interface

我对Java比较陌生,因此对JNI和C ++来说是一个新手。是否可以通过多个类访问相同的动态库?例如,如果在我的C ++中,我有一个类,而这个类又有两个子类,我是否可以从两个Java类访问子类?

例如,在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();
}

这可能吗?如果是的话,我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

类?是。实例?是(但是由你来共享它们,如果你使用多个线程,并假设它们不是可重入的,你需要同步访问权限。)

答案 1 :(得分:0)

在C ++中,您正在从DLL访问函数而不是类的实例。

您可以从类内部方法或独立函数中调用外部函数,无论它们是驻留在DLL,共享库还是其他翻译单元中。

所以,是的,您可以访问其他类的方法,前提是它们具有公共可访问性,并且在使用方法之前声明(原型)可用。