0

如何通过 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 参数?我需要传递多个参数。

4

2 回答 2

2

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

如果您希望 DLL 的初始化入口点接收数据元素,则需要使它们成为某个类的静态成员(或方法),并且 DLL 需要知道访问该类以获取它们。但是,这将是非常不正常的,并且可能不是执行您想要执行的任何操作的最佳方式。

于 2012-10-08T02:30:14.360 回答
1

好吧,如果你需要“多个参数”,任何现有的“ dll main ”都不适合你。您很可能指的是WinAPIDllMain,并且您可能认为此函数对于任何 DLL 都是必需的,就像每个 C 可执行文件都应具有main()函数一样。它不是。JNI 特别具有不带任何参数的功能,但是 DllMain根据您的要求JNI_OnLoad没有任何用户可定义的“多个参数”。如果需要自己的参数,为什么不能创建初始化方法呢?甚至DllMain医生也建议这样做。DllMain它所能做的非常有限。将 JNI 初始化方法设为静态,以便在实例化之前调用它SharedLibraryJava 中的对象。它有什么问题?说说你非常需要的“多个参数”。

于 2012-10-08T11:53:26.893 回答