将参数传递给DLL的主Java

时间:2012-10-08 02:11:26

标签: java java-native-interface

如何通过JNI将参数传递给Main?

目前我加载了我的DLL,如:

class SharedLibrary {

    native void GetBuffer(ByteBuffer Buffer);;

    SharedLibrary(String[] exec_args) {
        String path = new File(exec_args[0]).getAbsolutePath();
        System.load(path);  //Load My DLL. I want to Pass this DLL some arguments.

        ByteBuffer Foo = ByteBuffer.allocateDirect(.....);
        GetBuffer(Foo);
    }
}

如何传递DLL参数?我需要传递多个参数。

2 个答案:

答案 0 :(得分:2)

将库加载到Java中的目的是实现使用native属性声明的Java方法,例如native void methodname(_arguments go here_);。您可以在类中声明一个或多个本机方法,但是期望在DLL中定义所有这些方法(使用JNI标准)。从Java中,您可以像任何其他方法一样调用它们(通过使用为方法定义的任何参数)。

如果有数据元素需要DLL的初始化入口点接收,则需要使它们成为某些类的静态成员(或方法),并且DLL需要知道访问该类才能获取它们。然而,这将是非常不正常的,并且可能不是执行你想做的任何事情的最佳方式。

答案 1 :(得分:1)

好吧,如果你需要“多个参数”,任何现有的“ dll main ”都不适合你。您很可能指的是WinAPI DllMain,您可能认为此函数对于任何DLL都是必需的,这与每个C可执行文件具有main()函数的方式非常相似。它不是。特别是JNI JNI_OnLoad没有任何参数,但DllMain根据您的要求没有任何用户可定义的“多个参数”。如果您需要自己的参数,为什么不能创建初始化方法?即使DllMain doc也建议这样做。 DllMain的功能非常有限。使JNI init方法成为静态,以便在Java中实例化SharedLibrary对象之前调用它。有什么问题呢?告诉你一些你需要的“多个参数”。