我在myEclipse工具中建了一个java类,里面写的是jnative 调用dll文件,但不知道怎么老是错误!
//源代码
public static void main(String[] args) throws NativeException,IllegalAccessException {
System.loadLibrary("test");
JNative jnative=new JNative("test","show");
jnative.setRetVal(Type.INT);
int i=0;
jnative.setParameter(i++, Type.STRING,"127.0.0.1");
jnative.setParameter(i++, Type.STRING,"sa");
jnative.setParameter(i++, Type.STRING,"sa");
jnative.setParameter(i++, Type.STRING,"程序员");
jnative.setParameter(i++, Type.INT,"23");
jnative.setParameter(i++, Type.INT,"23");
jnative.invoke();
System.out.println(Integer.parseInt(jnative.getRetVal())); }
//错误信息
Exception in thread "main" org.xvolks.jnative.exceptions.NativeException: Function show not found
at org.xvolks.jnative.JNative.nLoadLibrary(Native Method)
at org.xvolks.jnative.JNative.loadLibrary(JNative.java:545)
at org.xvolks.jnative.JNative.<init>(JNative.java:521)
at org.xvolks.jnative.JNative.<init>(JNative.java:440)
at demo.main(demo.java:13)

解决方案 »

  1.   

    看您的代码可能是配置出现了错误。1.请先检验一下配置吧:
    先下载Jnative所要使用的包http://sourceforge.net/projects/jnative
    API    http://jnative.free.fr/docs/
    解压下载的JNative包获得三个文件,分别是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。
    JNativeCpp.dll是提供给WINDOWS的库组件需要复制到WINDOWS\SYSTEM32目录下
    libJNativeCpp.so是提供给linux下的组件,没怎么用- -!
    JNative.jar这是一个扩展包,可以复制到c:\jdk\jre\lib\ext下自己的目录结构,会自动加载,或者直接引入到工程包中。
    -------------------------------------------------------------------------------------
    2.您使用了System.loadLibrary加载,使用此方法可加载系统目录中的dll文件。也可以先把dll文件复制到system32目录下,使用文件前缀名作为参数来加载dll文件。使用System.load加载,此方法参数为dll文件全路径名。
    -------------------------------------------------------------------------------------
    希望您能提供详细的代码
      

  2.   

    你的DLL应该放到系统SYSTEM32路径下在就是有些DLL可能需要注册才能被调用
      

  3.   

    at demo.main(demo.java:13),13行是哪句?
    Function show not found,这种情况一般有两种原因:
    1. 找不到dll
        解决办法:将dll放到system32下面,该目录是windows查找dll的目录,一般情况下是可以的,如果不行,或者用System.out.println(System.getProperty("java.library.path"))打印出classpath,将dll放到classpath下, 然后用System.loadlibrary("xxx.dll")加载。2.dll在,函数名称不对
       看LZ的代码,这个dll好像是自己写的,如果对c++不熟悉的话,可能会造成错误,因为c++对函数进行优化时,可能会更改函数名字,比如你的"show"函数会被优化成__show@adfa,所以你在jnative中找不到show了。
        解决办法:用一个查看dll的工具,直接打开dll查看dll函数是否成功导出,以及被优化后的函数名是什么。然后再jnative中使用被优化后的函数名。或者在函数前面加上 extern "C",强制编译器使用c的方式编译,不对函数名进行优化。如果还不行,试试更改_cdecl __stdcal。这样应该就可以了。