`
13146489
  • 浏览: 251977 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JNATIVE 调用dll方法

    博客分类:
  • java
 
阅读更多
JNATIVE能很方面的调用dll中的方法:
C语言代码:
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <string.h> 


typedef int (*bOpenUsb20Video)();
typedef int (*sGetBarData)(char *out);
typedef int (*bCloseUsb20)();

int main(int argc, char* argv[])
{
	
    HINSTANCE		hDll;   //DLL句柄	
	bOpenUsb20Video	DllbOpenUsb20Video;
	sGetBarData		DllsGetBarData;
	bCloseUsb20		DllbCloseUsb20;

    hDll = LoadLibrary("dllLpDecode.dll");
	if (hDll != NULL)
	{
		DllbOpenUsb20Video = (bOpenUsb20Video)GetProcAddress(hDll,"bOpenUsb20Video");	
		if(DllbOpenUsb20Video==NULL)
		   return 0;

		DllsGetBarData = (sGetBarData)GetProcAddress(hDll,"sGetBarData");	
		if(DllsGetBarData==NULL)
		   return 0;

		DllbCloseUsb20 = (bCloseUsb20)GetProcAddress(hDll,"bCloseUsb20");	
		if(DllbCloseUsb20==NULL)
		   return 0;	

	}	


	if (0 != DllbOpenUsb20Video ())
		return 0;

	int ret;
	char out[256];
	int count=10;
	while (count)
	{
		ret = DllsGetBarData (out);
		if (ret == 1)
		{
			printf ("result:%s\r\n",out);
			count --;
		}

		Sleep (100);
	}

	DllbCloseUsb20 ();

	FreeLibrary(hDll);


	return 0;
	
}


使用jnative改写的方法:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tfsm.movie.camera;

import java.util.logging.Level;
import java.util.logging.Logger;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;

/**
 *
 * @author Administrator
 */
public class HY100CameraDecoder {

    static {
        //加载HY100驱动
        System.loadLibrary("lib/dllLpDecode");
    }

    public boolean openCamera() {
        try {
            JNative openCamera = new JNative("lib/dllLpDecode", "bOpenUsb20Video");
            openCamera.setRetVal(Type.INT);
            openCamera.invoke();
            return openCamera.getRetValAsInt() == 0;
        } catch (Exception ex) {
            Logger.getLogger(HY100CameraDecoder.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    public CameraDecodeResult getDecodeData() {
        try {
            JNative decodeData = new JNative("lib/dllLpDecode", "sGetBarData");
            Pointer p = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * 256));
            decodeData.setParameter(0, p);
            decodeData.setRetVal(Type.INT);
            decodeData.invoke();
            int resultCode = decodeData.getRetValAsInt();
            CameraDecodeResult reuslt = new CameraDecodeResult();
            //为1代表成功
            if (resultCode == 1) {
                String result = new String(p.getAsString().getBytes(), "UTF-8");
                return reuslt.setSuccess(true).setResult(result);
            }else{
                return reuslt;
            }
        } catch (Exception ex) {
            Logger.getLogger(HY100CameraDecoder.class.getName()).log(Level.SEVERE, null, ex);
            return  new CameraDecodeResult();
        }
    }

    public void closeCamera() {
        try {
            JNative closeCamera = new JNative("lib/dllLpDecode", "bCloseUsb20");
            closeCamera.setRetVal(Type.INT);
            closeCamera.invoke();
        } catch (Exception ex) {
            Logger.getLogger(HY100CameraDecoder.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
分享到:
评论

相关推荐

    在Java程序中使用JNative调用dll文件

    在Java程序中调用DLL(动态链接库)文件通常是通过JNI(Java Native Interface)来实现的,而JNative是JNI的一个封装库,它提供了一种更简洁的方式来调用C/C++编写的本地代码。这篇博客文章可能介绍了如何利用...

    简单jnative调用dll例子(含dll代码)

    本教程将通过一个简单的例子来演示如何使用JNI调用DLL动态链接库。 首先,我们需要理解JNI的工作原理。JNI提供了一套接口,使得Java代码可以通过这些接口来调用本地(Native)代码,这里的本地代码可以是C、C++等...

    java利用jnative调用DLL.txt

    ### Java通过JNative调用DLL的关键知识点 #### JNative简介 JNative是一个强大的Java库,允许Java应用程序直接调用本地动态链接库(DLL)或共享库。它为开发者提供了一个简单而灵活的方式来集成本地代码与Java环境...

    jnative框架调用dll动态库-简单demo(带dll文件).zip

    通过以上步骤,你已经掌握了使用jnative框架在Java中调用DLL动态库的基本方法。需要注意的是,实际应用中可能需要处理更复杂的类型转换、异常处理以及多线程问题。此外,jnative还提供了对C++对象和类的支持,允许更...

    jnative调用动态库

    标题中的“jnative调用动态库”指的是Java中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...

    JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用

    `JNative.jar`包含了JNative的实现,`TestJNative.java`是使用JNative调用DLL的示例。 3. **VC++创建DLL**: `CreateDLL.dll`是由Visual C++(VC++)编译生成的动态链接库,通常包含了一些可供其他程序调用的函数...

    java调用DLL:JNative

    ### Java调用DLL:JNative概述 在Java项目中,有时候需要调用本地系统的动态链接库(DLL)来实现特定的功能。传统的做法是通过Java Native Interface (JNI)来进行调用,但这往往涉及到复杂的配置和繁琐的过程。为了...

    JAVA调用DLL方法 JAVA调用DLL方

    ### JAVA调用DLL方法 在跨平台开发领域中,Java作为一种强大的编程语言,因其具有良好的移植性和跨平台性而被广泛使用。然而,在某些特定情况下,我们可能需要调用本地库(例如DLL文件)来实现特定功能或提高性能。...

    Java调用DLL的工具 JNative

    Java调用DLL的工具JNative是为了解决Java应用程序与本地动态链接库(DLL)交互问题而设计的一个开源组件。在传统的Java开发中,如果需要调用非Java编写的库,比如C或C++编译的DLL,通常会使用JNI(Java Native ...

    YiKaTong.rar_JNative_YiKaTong.r_java jnative dll_jnative api_jna

    《JNative调用DLL进行开发详解》 在Java编程中,有时我们需要调用本地系统库(如DLL文件)来执行特定的功能,这时JNative库就显得尤为重要。JNative是Java平台上的一个开源库,它允许Java程序直接调用C/C++编写的...

    Java调用DLL例子

    JNative是一个开源的Java库,它提供了一种方法使得Java程序能够直接调用C/C++编写的函数,从而间接实现了调用DLL的功能。JNative通过JNI(Java Native Interface)技术,为Java程序员提供了一个安全且灵活的方式来...

    java调用DLL文件

    以下是使用JNative调用DLL的步骤: 1. **准备DLL文件**:确保你有需要调用的DLL文件,并将其放在Java能够找到的路径下,比如系统的PATH环境变量所包含的目录,或者放在Java类路径下的native库目录。 2. **配置...

    JNA.jar-JNative.jar-jinvoke.jar-dll创建-JAVA调用-VC调用

    `TestJNative.java`很可能是使用JNative调用DLL的示例代码。 `jinvoke.jar`是另一个相关的库,它可能提供了一种更简便的Java本地调用方式,简化了JNI的使用。`TestJInvoke.java`可能展示了如何使用jinvoke来调用`...

    Java调用DLL源代码

    使用JNative调用DLL的基本流程: 1. **编写JNI头文件**:使用`javah`工具生成JNI头文件,该文件包含了C/C++函数原型,这些函数将作为Java和本地代码之间的桥梁。 2. **编写本地代码**:根据生成的头文件编写C/C++...

    JAVA如何调用dll:用JNI调用C或C++动态联接库

    以下是使用JNative调用DLL的Java代码示例: ```java package com.tvjody; import org.xvolks.jnative.JNative; import org.xvolks.jnative.Type; import org.xvolks.jnative.exceptions.NativeException; public ...

    JNative用java调用动态库VC++

    Java本地接口(JNI)是Java平台提供的一种原生方法调用机制,允许Java代码与用其他编程语言(如C++)编写的动态链接库(DLL)进行交互。在这个场景中,我们关注的是JNative,一个简化Java调用C/C++库的开源库。 ...

    java使用JNative调用动态连接库实例[文].pdf

    以下是一个关于如何使用JNative调用DLL函数的实例,主要涉及到两个关键函数:`EncryptPswStr`和`DecryptPswStr`,以及一个辅助函数`NotifyReadMeter`。 1. **加密与解密函数**: - `EncryptPswStr`:该函数用于...

    JAVA调用动态链接库DLL之JNative学习源码

    本教程将围绕如何使用`JNative`来调用DLL进行深入讲解。 首先,我们要理解Java和DLL之间的交互原理。Java本身不支持直接调用本地库,但通过JNI(Java Native Interface)可以实现这种跨语言调用。JNI提供了一种方式...

    Java调用dll文件开源组件jar包及说明文档

    总结来说,`JNative-1.3.2`是Java调用DLL和SO文件的利器,通过JNI接口,它消除了Java与本地代码之间的障碍,使得开发者可以灵活地利用已有的C/C++代码资源。正确理解和使用这个开源组件,能够极大地提升开发效率,...

    JNative.jar和JNativeCpp.dll

    总结一下,"JNative.jar和JNativeCpp.dll"组合是一个用于Java应用调用原生C++代码的解决方案。JNative.jar提供Java端的接口,而JNativeCpp.dll和libJNativeCpp.so则分别是Windows和Linux平台上的原生实现。这种技术...

Global site tag (gtag.js) - Google Analytics