64位jdk jnative_64位jdk和32位jdk - CSDN
  • JAVA调用动态链接库DLL的方法有:JNI(Java ...JInvoke从何而来不得而知,好像还需要注册付费的,64位JDK、JIR环境下运行不了,在VMware下安装的WindowsXP下同样有问题;JNative是开源的,但相关资料文档也特别的

    JAVA调用动态链接库DLL的方法有:JNI(Java Native Interface),JInvoke,JNative(Java to native interface),JNI是JAVA自身提供的方法;JInvoke从何而来不得而知,好像还需要注册付费的,64位的JDK、JIR环境下运行不了,在VMware下安装的WindowsXP下同样有问题;JNative是开源的,但相关资料文档也特别的少,好像已经停止更新了。JNative源码地址:http://jnative.cvs.sourceforge.net/viewvc/jnative/,jar包下载地址:http://sourceforge.net/projects/jnative/files/jnative/。

    开发环境:myeclipse-10.7-offline-installer-windows

    文件》新建》JAVA项目:


    输入项目名称,单击“Finish”:


    单击鼠标右键》新建》类:


    输入包名,类名,勾选“public static void main(String[] args)”,单击“Finish”:


    打开项目文件目录:


    将要调用的DLL文件“EhfscliaxDll.dll”复制到此目录下,该DLL的代码请参考:VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性

    新建“lib”文件夹,将JNative.jar复制到此目录下:


    配置编译目录:


    单击“Add External JARs”添加jar包,下图为已经添加过的:


    Helper类代码:

    package com.ehfscliax;
    
    import org.xvolks.jnative.JNative;  
    import org.xvolks.jnative.Type;
    import org.xvolks.jnative.exceptions.NativeException;  
    import org.xvolks.jnative.pointers.Pointer;
    
    public class Helper {
    	/**
    	 * @param args
    	 * @throws NativeException 
    	 */
    	public static void main(String[] args) throws NativeException {
    		
    		JNative.setLoggingEnabled(true);
    		try {
    			JNative getUrl = new JNative("EhfscliaxDll.dll", "getUrl"); //创建 getUrl 方法的JNative对象
    			getUrl.setRetVal(Type.STRING); //设置返回值类型为:String
    			getUrl.setParameter(0, "127.0.0.1"); //按顺序设置方法需要的参数值
    			getUrl.setParameter(1, 10087);
    			getUrl.setParameter(2, 123);
    			getUrl.invoke(); //调用方法
    			System.out.println(getUrl.getRetVal()); //输出返回值
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		}
    		
    		try {
    			JNative getPlayUrl = new JNative("EhfscliaxDll.dll", "getPlayUrl");
    			getPlayUrl.setRetVal(Type.INT); //此方法在DLL中定义的返回值类型为:const wchar_t*,如果设置返回值类型为:String,则只能获取到返回值的第一个字符
    			
    			String mgrIp = "127.0.0.1";
    			Pointer ptr = Pointer.createPointerFromString(mgrIp);
    			
    			getPlayUrl.setParameter(0, ptr);
    			getPlayUrl.setParameter(1, 10087);
    			getPlayUrl.setParameter(2, 123);
    			getPlayUrl.invoke();
    			//个人理解getRetValAsInt是获取返回值的指针地址,getUnicodeMemoryAsString方法从指针地址的内存中读取字符串
    			String url = JNative.getUnicodeMemoryAsString(getPlayUrl.getRetValAsInt());
    			System.out.println(url);
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    执行结果:

    2014-5-25 22:48:46, [DEBUG] [org.xvolks.jnative.JNative] [loadLibrary]: Successfully loaded library 'EhfscliaxDll.dll', functionName = getUrl: hModule = 268435456
    http://中文127.0.0.1:10087
    2014-5-25 22:48:46, [DEBUG] [org.xvolks.jnative.pointers.memory.MemoryBlockFactory] [setPreferredMemoryType]: Using org.xvolks.jnative.pointers.memory.HeapMemoryBlock memory reservation strategy
    http://-�17001:10087
    2014-5-25 22:48:46, [DEBUG] [org.xvolks.jnative.JNative] [unLoad]: Unloading native library 'EhfscliaxDll.dll'
    getUrl方法的返回值类型为:const char*,结果是正常的,getPlayUrl的返回值类型为:const wchar_t*,虽然通过getUnicodeMemoryAsString读取到了返回值,不是第一个字符,但中文乱码的问题一直没能解决。

    本学习项目源码下载:http://download.csdn.net/detail/testcs_dn/7400203

    你可能会遇到以下问题:

     

    如何捕获 System.loadLibrary 产生的异常?


    展开全文
  • 我使用JNative调用的C++自己写的DLL动态库文件,我在测试项目中运行的毫无问题 ,使用语句输出位数信息是32 Properties props = System.getProperties(); String bits=String.valueOf(props.get("sun.arch.data...
  • jnative 不支持64位 jdk

    2011-09-14 18:40:28
    jnative在官网中 说明:只支持32的windows 2000/xp/2003,linux操作系统...要在64位的操作系统中使用jnative 需要安装32jdk ,不能用64位jdk。而且jnative所要调用的dll,也应该是32系统中编译的。 目前jnat

     jnative在官网中 说明:只支持32位的windows 2000/xp/2003,linux操作系统。

    要在64位的操作系统中使用jnative 需要安装32位的jdk ,不能用64位的jdk。而且jnative所要调用的dll,也应该是32位系统中编译的。

    目前jnative最高位1.4版,而且好像不再更新了。

     

    展开全文
  • JNative环境(windows)

    2016-11-03 14:26:39
    支持32位jdk,如64位jdk,则在调用时会报错:JNativelibrary not loaded, sorry !操作系统3264位均可。 32系统调用dll:将要调用的dll文件放入C:\Windows\System32 64位系统调用dll:将要调用的dll文件放入C:\...

    支持32位jdk,如64位jdk,则在调用时会报错:JNativelibrary not loaded, sorry !

    操作系统32位、64位均可。

    32位系统调用dll:将要调用的dll文件放入C:\Windows\System32

    64位系统调用dll:将要调用的dll文件放入C:\Windows\SysWOW64
    展开全文
  • JNative用法注意事项

    2019-07-22 19:36:59
    搞java的同事说JNative看起来挺好使的,找俺帮忙调通。用的是1.3.1版本 环境设置。 JNative的调试信息需要打开才能更清楚些,要不总是说没加载库,跟没说一样。 System.setProperty("jnative.debug", "true"); ...

     

    公司要做个跟设备打交道的web系统,需要java调用dll。搞java的同事说JNative看起来挺好使的,找俺帮忙调通。用的是1.3.1版本

    1. 环境设置。

      JNative的调试信息需要打开才能更清楚些,要不总是说没加载库,跟没说一样。

      System.setProperty("jnative.debug", "true");

      如果调试信息里有System.LoadLibrary(),说明没有加载JNativeCpp.dll,指定全路径即可,双斜杠哦。

      System.setProperty("jnative.loadNative", "D:\\Test\\JNativeCpp.dll");

    2. lib库路径问题
      • windows

        在windows下需要把调用的dll路径设置到环境变量PATH中,除非你不介意拷到win32中,dll依赖的库也得在PATH或win32中。

      • linux

         linux下同样需要设置环境变量,编辑bashrc,添加 export LD_LIBRARY=so路径,依赖的库也得在PATH中,除非都放在/usr/lib/下

    3. lib库名称问题

      无论linux还是windows在JNative的构造函数中的lib库名字为库全名,包括扩展名dll、so,而且so需要包括前面的‘lib’,貌似与网上说的不太一样。

    4. 资源释放问题

      有些设备需要先初始化在操作,最后释放,所有功能都分散在不同函数中,JNative需要有个静态的实例,每次创建调用函数时lib库依旧是加载的。

    顺便吐槽下公司部署前2天才通知说在linux下部署,可怜我这linux、java双小白。。。。。。

    转载于:https://www.cnblogs.com/u0mo5/p/4049646.html

    展开全文
  • java调用动态链接库时,使用myeclipse或者其他IDE工具时,针对于web程序,会报这样的错误: java.lang.IllegalStateException:...at org.xvolks.jnative.JNative.<init>(JNative.java:337)at org.xvolks.jnat...

    java调用动态链接库时,使用myeclipse或者其他IDE工具时,针对于web程序,会报这样的错误:

    java.lang.IllegalStateException: JNative library not loaded, sorry !
    at org.xvolks.jnative.JNative.<init>(JNative.java:337)
    at org.xvolks.jnative.JNative.<init>(JNative.java:269)

    解决办法:
    1.首先需要安装32位的jdk
    2.安装完后,需要将tomcat本身引用的jdk目录也得修改成32位的jdk才可以。

    转载于:https://www.cnblogs.com/zzyblog/p/3232204.html

    展开全文
  • 准备工作 JNative官方主页:http://jnative.free.fr/SPIP-v1-8-3/ ...需要32GCC + 32位JDK 注意事项: 1.4RC3版本的JNative.jar中的lib-bin中自带了JNativeCpp.dll, 所以不需要再为JNative.j...
  • 这两天正在研究Java与底层C/C++的交互问题
  • JNative方式调用dllJNative是一种能够使Java语言使调用DLL的一种技术,对JNI进行了封装,可能有些读者会有这样一个问题,JNative对JNI进行了封装,并且是一种跨语言的使用DLL,会不会在效率方面很不如人意,我可以用...
  • 今天用java来调C++的dll总是出现JNative library not loaded, sorry ! 在网上看了很多资料大多都是说要把jnative的dll和要用的dll拷到...我用的是win7 64位jdk也是64位的,最后把jdk改为32的,就没有报这个错了
  • 手头的项目需要调用一个C++编的dll,前两天用C#试了试成功了,...import进eclipse里,run一下,发现报"JNative library not loaded"错误。而那个JNative.jar明明就在那个文件夹里。郁闷了。   搜了半天,原来很简
  • 1、我的电脑是win7 64位系统,安装的jdk也是64位,后来始终提示 运行的时候总是报错 JNative library not loaded, sorry ! JNative library not loaded, sorry ! JNative library not loaded, sorry ! JNativ
  • JNative方法调用dll

    2014-11-14 08:32:28
    运行环境是JDK1.4 报异常信息: An unexpected exception has been detected in native code outside the VM. Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at PC=0x4769AA6 ...
  • 最近公司有个需求,需要写一个webservice接口调用dll,之前没接触过,在网上找了找,然后...注意点:jdk选择的是321.7版本,tomcat容器选择的是327版本 然后接口写完,在不同的机器上部署都出现不同的报错情况...
  • 因为项目需要,用到了java调用dll文件中的方法。写成dll文件大多是用C、VB、Delphi语言弄成的,对于我这个纯粹干java的人员来说,着实让我太为难了。唉,也就是说我编程底子没有搭好,惭愧。要是这些语言我都会些,...
  • 1,首先下载JNative的库,其中包含JNative.jar, JNativeCpp.dll, libJNativeCpp.so这三个包。  JNative.jar是需要导入到Java工程的lib下。 通过Build Path即可导入。 建议将JNative.jar放在jdk的jre\lib\ext文件里...
  • 先说一下JNative的使用吧(JNative是封装了访问动态库的相关东西,方便java访问动态库的一个jar包):  首先:下载JNative(http://sourceforge.net/projects/jnative/)又是sourceforge的东西; 其次:将你需要调用的的...
  • 现在我有一个 dll 文件,但是需要调用的方法是在一个类中,请问该如何调用到这个方法呢? 要调用的方法不是静态的,应该需要new对象才能调到,问题就出现在这里了,求各位大神解答! ![图片说明]...
1 2 3 4 5 ... 12
收藏数 226
精华内容 90
关键字:

64位jdk jnative