使用JNA将多个.dll库注册到单个java类中

使用JNA将多个.dll库注册到单个java类中,java,c++,dll,shared-libraries,jna,Java,C++,Dll,Shared Libraries,Jna,首先是一些背景,为了彻底解释我已经尝试过的方法: 我在一个基于java的windows编程平台上工作,该平台提供了对自定义java函数的访问以及其他一些扩展。在这个建模平台的源代码中,有一个类“CVoDE”,它授予访问本地库“CVoDE”的功能,导入C++库的功能。 我从CVODE库中创建了共享库,生成了两个文件:Sundails\u CVODE.dll和Sundails\u nvecserial.dll 将第一个库添加到我的java路径显然会导致 Unexpected Exception Un

首先是一些背景,为了彻底解释我已经尝试过的方法:

我在一个基于java的windows编程平台上工作,该平台提供了对自定义java函数的访问以及其他一些扩展。在这个建模平台的源代码中,有一个类“CVoDE”,它授予访问本地库“CVoDE”的功能,导入C++库的功能。 我从CVODE库中创建了共享库,生成了两个文件:Sundails\u CVODE.dll和Sundails\u nvecserial.dll

将第一个库添加到我的java路径显然会导致

Unexpected Exception UnsatisfiedLinkError: Unable to load library 'cvode': The specified module could not be found.
因为名称不兼容。因此,我将sundials_cvode.dll的名称更改为cvode.dll并重试。导致一个错误,表明库sundials_cvode.dll中不存在所有方法:

Unexpected Exception UnsatisfiedLinkError: Error looking up function 'N_VDestroy_Serial': The specified procedure could not be found.
这使我确信库正在被正确找到和加载,但并非所有方法都可用。通过检查有问题的dll,我得出结论,CVODE类需要Sundails_CVODE.dll和Sundails_InvecSerial.dll库中的函数。因此,我尝试将平台源代码更改为

public class CVODE {

    static {
        Native.register("sundials_cvode");
        Native.register("sundials_nvecserial");
    }
    public static native int ... //methods
}
这仍然会导致

Unexpected Exception UnsatisfiedLinkError: Error looking up function 'N_VNew_Serial': The specified procedure could not be found.
我已确认类文件和dll中都存在此方法:


因此,我只能猜测两次调用Native.register()的错误结果。导致第二个库未加载或出现错误。我希望能够深入了解我做错了什么,或者如何更好地了解出了什么问题。

据我所知,每个类只能加载一个dll,即将类拆分为两个,每个类提供特定dll提供的方法


另请参见此处:

谢谢,成功了。不知何故,我现在可以让函数工作,但它崩溃后,x数量的步骤。但我想这是另一个问题
Unexpected Exception UnsatisfiedLinkError: Error looking up function 'N_VNew_Serial': The specified procedure could not be found.