从多个类访问单个DLL 我对java比较新,对JNI和C++来说是非常新的。可以通过多个类访问同一动态库吗?例如,如果在C++中,我有一个类,它又有两个子类,那么我能从两个java类中访问子类吗?

从多个类访问单个DLL 我对java比较新,对JNI和C++来说是非常新的。可以通过多个类访问同一动态库吗?例如,如果在C++中,我有一个类,它又有两个子类,那么我能从两个java类中访问子类吗?,java,c++,java-native-interface,Java,C++,Java Native Interface,例如,在foo.h中: class Controller { public: class A { public: int someMethod(); } class B { public: int someOtherMethod(); } } 在A.java中: class A { static {

例如,在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访问函数,而不是真正的类实例。p> 您可以从类内方法或独立函数中调用外部函数,无论它们位于DLL、共享库或其他转换单元中


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

我有点不清楚你在问什么。如果你的字面意思是DLL或共享对象文件,那么当然。JVM可以链接到单个库,并且所有类都共享该库。但是,如果您谈论的是一个正在运行的程序(即堆上有实例的程序),那么这可能会有点困难。我自己也会看FIFO或烟斗。IPC(进程间通信)可能比JNI好。你的问题是如何将C++类映射到java类,如可以实现的,例如,工具,比如OR?JNI不关心C++类。@ SamuelAudet,我要研究SWIG,但是它看起来有相当困难的设置。对于C++来说,这一切都有点吓人。尽管如此,我听说在涉及大型项目时使用它要好得多,在大型项目中,这个项目相当大(按照我的标准)。我试图用Java访问的项目有45个不同的类。编辑:刚刚研究了JavaCPP,它看起来很有前途。你已经做到了。只需确保A和B的本机方法都链接到foo.dll。