文書番号: 222092 - 最終更新日: 2007年6月14日 - リビジョン: 3.2

JNI を使用して Java からネイティブ (DLL) コードを呼び出す方法

お知らせお使いのオペレーティング システムには適用しない情報が含まれている場合があります。
この記事は、以前は次の ID で公開されていました: JP222092
すべて展開する | すべて折りたたむ

概要

この資料では、JNI (Java Native Interface) を使用して Java から DLL のネイティブ C/C++ コードを呼び出す手順について詳しく説明します。この資料は、Visual C++ コマンド ライン コンパイラ CL.EXE に関する知識があることを前提として記述されています。
  • JNI をサポートしているバージョンの Microsoft SDK for Java を使用していることを確認します。1998 年 12 月に JNI のサポートが SDK Version 3.1 以降に追加されました。
  • 環境変数 CLASSPATH に "[WINDIR]\Java\Classes\Classes.zip" と "C:"(C が開発ドライブの場合) への参照が含まれていることを確認します。
  • "[SDK-Java]\Bin" ディレクトリが JavaH、JVC、および JView のパスに含まれていることを確認します。
  • コマンド ラインを使用できるように Visual C++ が正しくセットアップされていることを確認します。詳細については、Visual C++ のマニュアルを参照してください。
  • Java コードを記述します。
    public class TestJNI {
       public native void greetings();
    
       static {
          System.loadLibrary("greet");
       }
    
       public static void main(String args[]) {
          new TestJNI().greetings();
       }
    }
    					
  • Java ファイルをコンパイルします。
    jvc TestJNI.java
    					
  • 生成されたクラス ファイルで JavaH を実行します。
    javah -jni TestJNI
    					
  • 生成されたヘッダー ファイルに基づいた C/C++ コードを記述します。
    #include "TestJNI.h"
    #include <stdio.h>
    
    JNIEXPORT void JNICALL Java_TestJNI_greetings(JNIEnv *env,jobject jobj) {
       printf("Hello from Visual C++!");
    }
    					
  • C/C++ コードをコンパイルします。
    cl greet.cpp -Ic:\sdk-java.31\include -Fegreet.dll -MD -LD
    					
  • アプリケーションをテストします。
    jview TestJNI
    					

詳細

注意事項
  • System.loadLibrary( ) の呼び出しでは、ネイティブ ライブラリのファイル名から ".dll" 拡張子を省略します。
  • レガシ ネイティブ コードをサポートするには、DLL の関数がレガシ コードを呼び出すようにリダイレクトします。
(c) Microsoft Corporation 1999, All Rights Reserved. Contributions by Joseph B. Hall, Microsoft Corporation.

関連情報

Visual J++ および SDK for Java のサポート情報を参照するには、次のマイクロソフト Web サイトをクリックしてください。
http://www.microsoft.com/japan/msdn/vs_previous/visualj/ (http://www.microsoft.com/japan/msdn/vs_previous/visualj/)

この資料は以下の製品について記述したものです。
  • Microsoft Virtual Machine for Java
  • Microsoft Visual J++ 6.0 Standard Edition
  • Microsoft SDK for Java 3.1
キーワード:?
kbfaq kbhowto kbjnative KB222092
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"