如何通过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参数?我需要传递多个参数。
答案 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
对象之前调用它。有什么问题呢?告诉你一些你需要的“多个参数”。