`
13146489
  • 浏览: 246407 次
  • 性别: 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);
        }
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics