Java JNI可以处理任何dll文件(Windows)吗?
我是JNI的新手。我有几个问题: JNI可以处理windows中存在的每种类型的dll吗?我想链接一个库,但它给了我错误。JNI和dll是否可能不兼容 摘自VB.NET(它可以工作) 来自Java的完整代码 公共类主窗体{Java JNI可以处理任何dll文件(Windows)吗?,java,dll,java-native-interface,Java,Dll,Java Native Interface,我是JNI的新手。我有几个问题: JNI可以处理windows中存在的每种类型的dll吗?我想链接一个库,但它给了我错误。JNI和dll是否可能不兼容 摘自VB.NET(它可以工作) 来自Java的完整代码 公共类主窗体{ /** * @param args */ public native int ConnectReader(); public static void main(String[] args) { // TODO Auto-generated method stub
/**
* @param args
*/
public native int ConnectReader();
public static void main(String[] args) {
// TODO Auto-generated method stub
MainForm mf = new MainForm();
System.out.println(mf.ConnectReader());
}
static {
System.loadLibrary("rfidhid");
}
}
显示错误代码
Exception in thread "main" java.lang.UnsatisfiedLinkError: MainForm.ConnectReader()I
at MainForm.ConnectReader(Native Method)
at MainForm.main(MainForm.java:13)
有人能指出我哪里做错了吗
编辑:
事实证明,我应该这样做(而且是有效的)
JNI访问使用损坏的名称;您需要使用正确的名称和参数将系统API包装在JNI存根中。不能直接调用系统API 我建议彻底研究JNI,或者使用类似的方法来减轻一些繁重的工作 例如,给定Java:
package com.mycompany.jni;
public MyClass
{
native boolean someMethod(String arg)
...
}
链接的本机方法类似于:
JNIEXPORT jboolean JNICALL Java_com_mycompany_jni_MyClass_someMethod(JNIEnv *jep, jobject thsObj, jstring arg)
你节省了整整一天(为了研究错误的方向)很高兴我能帮你。我仍然记得那些年前在JNI上剥皮是什么感觉。
package com.mycompany.jni;
public MyClass
{
native boolean someMethod(String arg)
...
}
JNIEXPORT jboolean JNICALL Java_com_mycompany_jni_MyClass_someMethod(JNIEnv *jep, jobject thsObj, jstring arg)