資源簡介
實例中演示了各種參數形式的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個文件信息
評論
共有 條評論