8/11/2008

[Java] jawin 調用本地dll

最近做一個項目使用jawin調用本地的dll,給有關心得貼上來
步驟:
1.下載jawin:http://jawinproject.sourceforge.net/。
2.將jawin.jar放於%JAVA_HOME%\jre\lib\ext下 。
3.將jawin.dll放於c win32下。





import org.jawin.funcptr; 
import org.jawin.returnflags; 
public class createppt { 
       public static void main(string[] args) { 
              try { 
                     funcptr msgbox = new funcptr("user32.dll", "messageboxw"); //獲得函數指針
                     msgbox.invoke(0, "hello from a dll", "from jawin", 0, returnflags.fail_on_false); 
/*1.     指令字符串。一個"XXX:Y:ZZZ"格式的字符串。其含義分別是傳入參數中的每個字節的數據類型意義、返回值的類型、需要從傳入指針中讀取的數據(inout類型參數)。比如:

函數簽名int func(int, int, struct s*, char*); //其中struct s*調用完函數後需要讀出,struct s所占字節數為16。

其指令字符串為:IIP16G:I:L4L4n16L4。該字符串在解析返回值(字節數組)時,首先應該是返回類型I對應的4個字節,然後是inout類型的參數中n16對應的16個字節。

其中字符串的意義可以在Jawin提供的文件instructions.h中找到,或者在官方文檔(Jawin數據指令)中找到常用的一些指令字符串的意義。

2.     傳入參數的總字節大小。

3.     前面寫好的傳入參數的原始字節流。

4.     一個object數組。

5.     ReturnFlags,用以根據C/C++返回值將C/C++的錯誤轉換為Java的異常並拋出。其中CHECK_NONE表示不檢查;CHECK_FALSE和 CHECK_WIN32分別表示返回0是FALSE和SUCCESS,根據是否出錯決定是否拋出異常;CHECK_HRESULT表示使用COM模型中的 HRESULT作為返回值,其錯誤碼可以配置。

*/
              } catch (exception e) { 
                     e.printstacktrace(); 
              }

沒有留言:

張貼留言