Jna

作者: 潭潭_180 | 来源:发表于2018-12-20 19:02 被阅读0次

编写JNA封装c接口给JAVA调用最重要是参数传递,JNA只认纯c类型,对于c++的stl类型是不认识的,并且需要导出extern "c"函数。

流程:

1、c++导出extern “c" 的接口

extern "C"

    { 

 __declspec(dllexport) void fun1(Class* object);

   __declspec(dllexport) int fun2(char* buffer)

        {

        char * ctemp = "test";

        if(buffer) memcpy(buffer,ctemp,strlen(ctemp));

        return strlen(ctemp)

        }

    }

2、jna中声明一个interface继承Library:

importcom.sun.jna.Library;

importcom.sun.jna.Native;

importcom.sun.jna.Pointer;

public interface DLL extends Library{

//此处需要特别注意,在windows下最好用”\\" ,我在使用"/"出现加载失败的情况,不知道具体原因,试验多次后,改成"\\"即可。

    DLL  Instance=(DLL )Native.loadLibrary("d:\\test\\api.dll",DLL .class);

    String func1(Pointer object) ;

//从c++中返回string,此处需要这样定义,在下面详细述说该种用法

    int func2(Pointer buffer ) ;

//如果是java传递字符串给c++,直接String就可以

}

3、使用

public class Class1{

private final DLL  dll;

private Pointer self;

public Class1(){

this.dll = DLL.instance;

this.self = Pointer.NULL;

}

String fun2(){

Pointer buffer = Pointer.NULL;

int len = this.dll.func2(buffer);

buffer = new Memory(len);

//len = this.dll.func2(buffer);

byte[] byteArray = buffer.getByteArray(0,len);

String str = new String(byteArray );

return str;

}

}

相关文章

  • Java使用JNA方式调用DLL(动态链接库)(原创,装载请注明

    Java使用JNA调用DLL 1.准备 1.JDK环境2.Eclipse3.JNA包下载JNA包:(1).JNA的...

  • JNA从入门到精通-02入门

    JNA入门 添加JNA的依赖 原始的c代码

  • 2019-04-04 springboot实现Excel导入

    添加依赖 net.java.dev.jna jna-platform

  • jna

    cpp jna jni

  • jna

    JNA Java Natice Access ,提供一组Java工具类访问系统本地库。开发人员只需在java接口中...

  • jna

    jna遇到一个问题,c库参数为long,jna声明和调用也是long,然后调用之后,c始终收到的是0。 后面分析是...

  • Jna

    编写JNA封装c接口给JAVA调用最重要是参数传递,JNA只认纯c类型,对于c++的stl类型是不认识的,并且需要...

  • jna

    jna:java native access,是一个建立在经典的JNI技术之上的Java开源框架。JNA提供一组J...

  • JNA

    JNA(Java Native Access)是建立在JNI(Java Native Interface,Java...

  • JNA介绍以及简单使用

    JNA介绍 JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(...

网友评论

      本文标题:Jna

      本文链接:https://www.haomeiwen.com/subject/tdpykqtx.html