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);
}
}
}
分享到:
相关推荐
一个简单的jnative调用dll例子,因为网上找到java的都不包含dll代码,所以自己研究弄了个简单例子
NULL 博文链接:https://unifocus.iteye.com/blog/678463
java利用jnative调用DLL.txt
jnative框架调用dll动态库-简单demo(带dll文件)
包含jna.jar,JNative.jar,VC++创建DLL例子,VC++调用DLL例子,JAVA-JNA、JNative调用DLL例子
Jnative调用DLL进行开发的具体代码
JNative.jar , JNativeCpp.dll ,libJNativeCpp.so,java通过JNative调用动态dll所需的文件jar
是Java 调用DLL动态库框架,功能强大,告别往日的JNI,只需定义接口,就可以方便调用DLL库,为开发人员省了不少事。
JAVA使用JNative包调用DLL文件
因为项目的需求,要在JAVA项目中调用Windows的Dll,之前用Jni调用过C写的Dll文件,比较麻烦,后在网上找到一个开源的组件JNative,使用后感觉比较方便。
包含jna.jar,JNative.jar,jinvoke.jar,VC++创建DLL例子,VC++调用DLL例子,JAVA、JNA、JNative、jinvoke调用DLL例子
这是项目中用到的java掉用本地动态链接库(DLL)的一个例子,用了JNative Jar包
jnative 1.3,1.4版本 外加java 调用c++ dll 案例 整体打包 案例可用 强调 jnative调用c++ 不够精准方法名会有偏移
因工作的缘故,有机会接触了Java本地方法调用(JNI)。本文中记下了初试JNI的过程和一点点体会。 使用Java的JNI调用C/C++的动态联结库有个固定的步骤,下面将以一个最简单的HelloWorld例子程序来说明调用过程。这个...
1、需要将JNativeCpp.dll和需要调用的dll放到C:\WINDOWS\system32目录下。 2、将JNative.jar放到项目下。 3、如果运行时还是提示找不到你调用的dll,那么将mscoree.dll也放到C:\WINDOWS\system32目录下并注册此dll。...
一个用于在java中调用dll动态代码库的开源组件,JNative-1.3.2
TestJNative_Eclipse.rar 为MyEclipse工程 JNativeTest_VC.rar为VC ...主要写了一些JNative调用DLL的例子,包含了JNative回调函数的用法与指针的用法,以供参考,希望对使用JNative的开发人员有帮助 有问题大家一起讨论
JAVA调用动态链接库DLL之JNative学习源码,详细请参考:http://blog.csdn.net/testcs_dn/article/details/26980027
Java调用DLL源代码JNA和JNative
java调用DLL实例程序,使用的是开源JNative调用