下面要介紹的程序的前身是由Larry OBrien原創的一些代碼,並以由Craig Reynolds於1986年編制的“Boids&r
JAVA語言及其標准API(應用程序編程接口)應付應用程序的編寫已綽綽有余。但在某些情況下,還是必須使用非JAVA編碼。例如,我們有時要訪問操作系
JNI是一種包容極廣的編程接口,允許我們從Java應用程序裡調用固有方法。它是在Java 1.1裡新增的,維持著與Java 1.0的相應特性&md
我們先從一個簡單的例子開始:一個Java程序調用固有方法,後者再調用Win32的API函數MessageBox(),顯示出一個圖形化的文本框。這個
利用JNI函數,程序員可從一個固有方法的內部與JVM打交道。正如大家在前面的例子中看到的那樣,每個JNI固有方法都會接收一個特殊的自變量作為自己的
在前例中,我們將一個字串傳遞給固有方法。事實上,亦可將自己創建的Java對象傳遞給固有方法。在我們的固有方法內部,可訪問已收到的那些對象的字段及方
利用JNI,可丟棄、捕捉、打印以及重新丟棄Java異常,就象在一個Java程序裡那樣。但對程序員來說,需自行調用專用的JNI函數,以便對異常進行處
由於Java是一種多線程語言,幾個線程可能同時發出對一個固有方法的調用(若另一個線程發出調用,固有方法可能在運行期間暫停)。此時,完全要由程序員來
為實現JNI固有方法,最簡單的方法就是在一個Java類裡編寫固有方法的原型,編譯那個類,再通過javah運行.class文件。但假若我們已有一個大
到本書完稿時為止,微軟仍未提供對JNI的支持,只是用自己的專利方法提供了對非Java代碼調用的支持。這一支持內建到編譯器Microsoft JVM
J/Direct是調用Win32 DLL函數最簡單的方式。它的主要設計目標是與Win32API打交道,但完全可用它調用其他任何API。但是,盡管這
作為使用J/Direct唯一的途徑,@dll.import引導命令相當靈活。它提供了為數眾多的修改符,可用它們自定義同非Java代碼建立鏈接關系的
Win32 API的體積相當龐大——包含了數以千計的函數、常數以及數據類型。當然,我們並不想將每個Win32 API函數都
“匯集”(Marshaling)是指將一個函數自變量從它原始的二進制形式轉換成與語言無關的某種形式,再將這種通用形式轉換成
有些Win32 API函數要求將一個函數指針作為自己的參數使用。Windows API函數隨後就可以調用自變量函數(通常是在以後發生特定的事件時)
通過@dll.import引導命令內的修改符(標記),還可用到J/Direct的另兩項特性。第一項是對OLE函數的簡化訪問,第二項是選擇API函數
同J/Direct相比,RNI是一種比非Java代碼復雜得多的接口;但它的功能也十分強大。RNI比J/Direct更接近於JVM,這也使我們能寫出
COM(以前稱為OLE)代表微軟公司的“組件對象模型”(Component Object Model),它是所有Activ
COM是一種二進制規范,致力於實施可相互操作的對象。例如,COM認為一個對象的二進制布局必須能夠調用另一個COM對象裡的服務。由於是對二進制布局的
同C++/COM程序員相比,Microsoft Java編譯器、虛擬機以及各式各樣的工具極大簡化了Java/COM程序員的工作。編譯器有特殊的引導