由於項目要求
Java調用動態庫所需要關心的問題
l 如何裝載dll文件
l 數據類型是如何對應的
l 如何給使用的方法傳遞參數
l 如何獲取返回的值
JNative INFO
Resource URL:
Source Code:
Detailed Review:
JavaDOC
Version
一個開源的組件
為什麼選擇JNative
同類的開源組件相對活躍的還有
l JNA 需要用戶對所使用的DLL文件事先進行封裝
l Nativecall 暫時還不知道如何裝載dll文件
l Jawin 數據類型匹配相當敏感
How to
解壓JNative
JNativeCpp
libJNativeCpp
JNative
結構映射(Structure Mapping)
Type
Length
JNative class
DWORD
org
HWND
org
COLORREF
org
COLORREF*
org
LPARAM
org
LPCCHOOKPROC
org
LPCTSTR
org
一些關鍵的類及方法
Class
作用
一般用到的方法(參數略
org
裝載dll文件
JNative()
org
替代本地函數中的的指針
Pointer()
org
申請一塊內存空間
createMemoryBlock()
org
拋出裝載
org
列舉和管理Jnative需要的不同的數據類型
(二)
簡單測試
SCReader
SCREADER_API WINAPI long SCHelp_HexStringToBytes(
LPCTSTR pSrc
BYTE* pTar
int MaxCount
);
注意
通過Jnative 用java 來調用代碼如下
package onlyfun
import org
import org
import org
import org
import org
public class UserCall {
/**
* return 轉換成功的字節數
*/
static JNative Something = null;
static Pointer pointer;
public String getSomething(String pSrc
try{
if(Something == null){
pTar = new Pointer(MemoryBlockFactory
Something = new JNative(
// 利用org
Something
// 指定返回參數的類型
}
int i=
Something
Something
Something
System
System
//傳值
Something
return Something
}finally{
if(Something!=null){
Something
}
}
}
public Pointer creatPointer() throws NativeException{
pointer = new Pointer(MemoryBlockFactory
pointer
return pointer;
}
public static void main(String[] args) throws NativeException
UserCall uc = new UserCall();
String result = uc
System
TestCallback
}
}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26786.html