<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    E81086713E446D36F62B2AA2A3502B5EB155

    Java雜家

    雜七雜八。。。一家之言

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      40 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks
    去年也大概是這個時候寫了第一個Java2EXE,之后又加了寫特性,但是每次我看代碼都感覺慘不忍睹,很混亂,而且編譯,鏈接的過程也有點繞。
    現在又過了一年了,如果說上次版本的Load過程主要是靠Java(Java加密,解壓),那么這次基本把這些費時的操作全交給CPP了。
    好了,總結一下這次的改動
    1)Loader以及Starter完全是CPP代碼,結構很清晰了。
    2)加密以及解壓交給CPP,速度比以前快了。
    3)整合了JNative,這個是重點,下文詳述。
    4)生成工具用MFC寫,一個簡單的向導。

    OK,那么JNative是干什么的呢?
    官方的描述是 “JNative, Java framework for DLL access for Windows and Linux”
    就是說,有了這個框架,你訪問DLL里的方法就不再需要寫DLL了,只需要寫Java Code了,可能有人問它是怎么做到的呢?
    假如說你要訪問Kernel32.dll里的某個方法A,你首先需要這個方法的句柄,這個句柄就是通過new一個org.xvolks.jnative.JNative實例來保持的,
    類似如:
    org.xvolks.jnative.Native methodA=new org.xvolks.jnative.JNative("Kernel32.dll","A");
    有了這個句柄,你只要在上面設置參數,返回值,以及類型就可以調用它了。每個調用它上面的JNI里的本地方法就會自動來進行參數解析,解碼,調用到目標DLL方法,這個過程基本不可避免需要少量的匯編代碼。
    JNative為了可移植性,代碼是在Cygwin下可編譯的,沒有MSVC可編譯的版本。

    對此,本人改了部分代碼用于直接一起鏈接(主要是把GCC嵌入匯編改為對應的MSVC的嵌入匯編代碼),而不是讓JNative生成一個動態鏈接庫。

    如上,由于JNative改成了靜態庫,程序發布的時候,只要是通過Java2EXE Builder來創建成EXE的話,你就不需要那個JNativeCpp.dll文件了,只有一個EXE.

    你調試的時候可以用官方的版本,發布就只要你的代碼(JNative的class也都在集成在生成工具里,不需要你自己添加進來)。

    來看個簡單的例子,我們從Java代碼里取得當前進程的全路徑名:
    import org.xvolks.jnative.JNative;
    import org.xvolks.jnative.Type;
    import org.xvolks.jnative.exceptions.NativeException;
    import org.xvolks.jnative.pointers.Pointer;
    import org.xvolks.jnative.pointers.memory.HeapMemoryBlock;

    /**
     * DWORD GetModuleFileName(
     * HMODULE hModule,
     * LPTSTR lpFilename,
     * DWORD nSize
     *);

     * 
    @author yovn
     *
     
    */
    public class TestReadProcessPath {

        
    /**
         * 
         * 
    @param args
         * 
    @throws NativeException 
         * 
    @throws IllegalAccessException 
         
    */
        
    public static void main(String[] args) throws NativeException, IllegalAccessException {
            JNative v
    =new JNative("Kernel32.dll","GetModuleFileNameA");
            
    int i = 0;
            v.setRetVal(Type.INT);
            Pointer pName 
    = new Pointer(new HeapMemoryBlock(1024));
            
            v.setParameter(i
    ++0);//module handle
            v.setParameter(i++, pName);//pFileName
            v.setParameter(i++1024);//nSize
            v.setRetVal(Type.INT);
            v.invoke();
            
    int ret = Integer.parseInt(v.getRetVal());
            
    if (ret == 0) {
                
    // return "null";
                System.err.println(
                        
    "GetModuleFileName failed!");
            } 
    else {
                
                String path 
    = pName.getAsString().substring(0,
                        ret);
                pName.dispose();
                v.dispose();
                System.out.println(
    "current process's path is:"+path);
            }
        }

    }

    編譯,把這個文件單獨打包成一個jar文件,下面是個用這個工具生成EXE的截圖:
    生成EXE向導第一步
    生成 EXE向導第二步



    請從這里下載 Java2EXE Builder Platform











    posted on 2008-02-26 00:31 DoubleH 閱讀(1819) 評論(7)  編輯  收藏

    Feedback

    # re: 重寫Jav2EXE Builder Platform 2008-02-26 09:07 dennis
    截圖好像沒出來哦  回復  更多評論
      

    # re: 重寫Jav2EXE Builder Platform[未登錄] 2008-02-26 09:48 javacap
    點圖片的鏈接地址進去應該可以看到  回復  更多評論
      

    # re: 重寫Jav2EXE Builder Platform 2008-02-29 09:28 liigo
    Jav2EXE 是什么? 根據名稱推測, 好像是將 java 源代碼編譯成一個獨立的 EXE 程序, 可脫離 JRE 單獨運行。  回復  更多評論
      

    # re: 重寫Jav2EXE Builder Platform 2008-02-29 09:30 liigo
    標題中有個筆誤, Jav2EXE? Java2EXE?  回復  更多評論
      

    # re: 重寫Jav2EXE Builder Platform 2008-02-29 20:43 DoubleH
    @liigo
    呵呵,讓你失望了,不能脫離jre運行。  回復  更多評論
      

    # re: 重寫Jav2EXE Builder Platform 2008-03-20 08:40 miaomiao
    很好,我又來了.先下載了~  回復  更多評論
      

    # re: 重寫Jav2EXE Builder Platform 2008-03-20 18:25 miaomiao
    編譯時碰到我的jar包里面有gif文件出錯了...
    選多個jar包不能多選,要不能記住配置也行啊,像NativeJ那樣.
    感謝更新,期待改進...  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产A在亚洲线播放| 亚洲午夜爱爱香蕉片| 亚洲欧洲自拍拍偷午夜色| 免费看搞黄视频网站| 亚洲AV无码久久精品狠狠爱浪潮| 一级一级毛片免费播放| 久久影视综合亚洲| 最近免费字幕中文大全| 亚洲国产综合专区在线电影| 99视频在线精品免费| 亚洲精品视频在线观看免费| 亚洲免费黄色网址| 亚洲人成色777777老人头| 免费一级毛片清高播放| 久久九九久精品国产免费直播| 亚洲国产精品无码中文字| 99久久久国产精品免费蜜臀| 亚洲免费在线视频播放| 日本a级片免费看| 成人免费无码H在线观看不卡| 亚洲成人午夜在线| 24小时日本在线www免费的| 国产亚洲精品美女2020久久| 国产L精品国产亚洲区久久| 无码A级毛片免费视频内谢| 91亚洲自偷在线观看国产馆| 欧洲精品免费一区二区三区| h视频在线免费观看| 亚洲韩国—中文字幕| 女人被免费视频网站| 国产在线观看免费av站| 亚洲人成片在线观看| 亚洲精品专区在线观看| 84pao国产成视频免费播放| 亚洲色大成网站www永久网站| 亚洲无码黄色网址| 波多野结衣免费在线观看| 永久免费无码日韩视频| 亚洲视频日韩视频| 亚洲av高清在线观看一区二区| 十九岁在线观看免费完整版电影|