最近做一個項目使用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();
}
沒有留言:
張貼留言