• 大小: 975KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: Java
  • 标签: JNA  dll  java  

资源简介

实例中演示了各种参数形式的DLL函数调用,如:基本数据类型、基本数据类型的指针和引用、结构体、结构体的指针和引用、函数指针和回调函数、字符串指针、输入数组、输出数组等,非常实用。

资源截图

代码片段和文件信息

/************************************************
 * Zhongguancun East Road #95 Room 505
 * 2011-07-18 
 ************************************************/

package CallMain;

import com.sun.jna.Library;
import com.sun.jna.Callback;
import com.sun.jna.Native;
import com.sun.jna.Structure;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.FloatByReference;

public class CallMain 
{
//字符转换
public static int StringToFixedBytes(String str byte by[])
{
byte byTemp[] = str.getBytes();
int strLen = byTemp.length;
int byLen = by.length;

if(strLen > byLen)
return -1;

if(strLen==0)
for(int i=0; i by[i] = ‘\0‘;

System.arraycopy(byTemp 0 by 0 strLen);
return strLen;
}

//字符转换
public static String BytesToString(byte by[])
{
String str = new String(by);
     int pos = str.indexOf (‘\0‘);
     if(pos!=-1)
     str = str.substring (0 pos);
return str;
}

//简单结构
public static class Rect extends Structure
{
public static class ByReference extends Rect implements Structure.ByReference {};
public static class ByValue extends Rect implements Structure.ByValue{};
public int nLong;
        public int nShort;
    }

//包含字符数组的结构
public static class SerialNum extends Structure
{
public static class ByReference extends SerialNum implements Structure.ByReference {};
        public static class ByValue extends SerialNum implements Structure.ByValue{};
        
public int id;
        public byte msg[] = new byte[32];
        
        public SerialNum(){
         this.allocateMemory();
        }
        
        public int setMSG(String str){       
         return StringToFixedBytes(str msg);
        }
        
        public String getMsg(){
         return BytesToString(msg);
        }
    }

//用于二维数组
public static class Char32msg extends Structure
{
// public static class ByReference extends Char32msg implements Structure.ByReference {};
//      public static class ByValue extends Char32msg implements Structure.ByValue{};
       
        public byte msg[] = new byte[32];
        
        public Char32msg(){
         this.allocateMemory();
        }
        
        public String getMsg(){
         return BytesToString(msg);
        }
}

//用于带数组指针的结构
public static class Staff extends Structure{
public static class ByReference extends Staff implements Structure.ByReference {};

public SerialNum.ByReference pSN;
public int nCount;

public Staff() {nCount=0;} 
    public SerialNum.ByReference[] toArray() {
        return (SerialNum.ByReference[]) pSN.toArray(nCount);
    }
}

//简单回调接口
public static interface CustumPlus extends Callback {
public abstract int callback(int aint b);
}

//简单回调实现
public static class SimpleAdd implements CustumPlus{
public final int callback(int a int b){
return a+b;  
    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        347  2011-07-13 14:06  JNA_Demo\My JNA Demo\CallDll\.classpath

     文件        383  2011-07-13 14:05  JNA_Demo\My JNA Demo\CallDll\.project

     文件        498  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$AssignMethod$ByReference.class

     文件        575  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$AssignMethod.class

     文件        585  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$Char32msg.class

     文件        239  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$CustumPlus.class

     文件       1165  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$DispLastSN.class

     文件       2036  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$DllInterface.class

     文件        399  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$OnAssignSN.class

     文件        466  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$Rect$ByReference.class

     文件        450  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$Rect$ByValue.class

     文件        496  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$Rect.class

     文件        486  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$SerialNum$ByReference.class

     文件        470  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$SerialNum$ByValue.class

     文件        920  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$SerialNum.class

     文件        521  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$SimpleAdd.class

     文件        470  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$Staff$ByReference.class

     文件        835  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain$Staff.class

     文件       7503  2011-07-22 15:06  JNA_Demo\My JNA Demo\CallDll\bin\CallMain\CallMain.class

     文件     131072  2011-07-20 17:07  JNA_Demo\My JNA Demo\CallDll\DllTest.dll

     文件     948100  2011-05-12 14:09  JNA_Demo\My JNA Demo\CallDll\jna.jar

     文件       9287  2011-07-22 15:09  JNA_Demo\My JNA Demo\CallDll\src\CallMain\CallMain.java

     文件      18824  2011-07-18 18:12  JNA_Demo\My JNA Demo\DllTest\DllTest\DllTest.aps

     文件        328  2008-04-07 15:51  JNA_Demo\My JNA Demo\DllTest\DllTest\DllTest.clw

     文件       6034  2011-07-22 15:08  JNA_Demo\My JNA Demo\DllTest\DllTest\DllTest.cpp

     文件        425  2011-07-20 17:07  JNA_Demo\My JNA Demo\DllTest\DllTest\DllTest.def

     文件       4167  2008-04-07 15:51  JNA_Demo\My JNA Demo\DllTest\DllTest\DllTest.dsp

     文件        539  2008-04-07 15:51  JNA_Demo\My JNA Demo\DllTest\DllTest\DllTest.dsw

     文件       2682  2011-07-20 17:07  JNA_Demo\My JNA Demo\DllTest\DllTest\DllTest.h

     文件      53760  2008-05-13 16:26  JNA_Demo\My JNA Demo\DllTest\DllTest\DllTest.opt

............此处省略24个文件信息

评论

共有 条评论