IT科技

當前位置 /首頁/IT科技 > /列表

java呼叫c++介面

<link rel="stylesheet" href="https://js.how234.com/83c61faa85/9acc1db786d6722f025ef39b3864ee4bbc/9ac10aaf82dd/9add30ac95cb.css" type="text/css" /><link rel="stylesheet" href="https://js.how234.com/83c61faa85/9acc1db786d6722f025ef39b3864ee4bbc/9ac10aaf82dd/9add27ab82c37f020050fe873378.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><style>pre{overflow-x: auto}</style>

1、編寫Java程式:HelloWorld

程式碼如下:

package HelloWorld;public class HelloWorld {   public native void sayHello();      public static void main(String[] args) {    System.loadLibrary("Win32Project1");    HelloWorld tNative = new HelloWorld();    tNative.sayHello();   }}

2、Windows環境下,在cmd中編譯以上程式

編譯通過後,使用 javah -jni HelloWorld.HelloWorld命令,在src資料夾下生成HelloWorld_HelloWorld.h檔案(注意,此處兩個HelloWorld,前一個指包名,後一個指類名)。

在執行完這一步後,能夠看到HelloWorld.java、HelloWorld.class、HelloWorld_HelloWorld.h這三個檔案是位於同一個src資料夾下的,如下圖所示(注意,此處的src資料夾是在eclipse中建立HelloWorld這個java project時自動生成的,並非手動建立的):

java呼叫c++介面

3、編寫C++程式

開啟Visual Studio 2013,執行“檔案—>新建—>專案—>Visual C++—>Win32 專案—>確定—>下一步–>選擇DLL(D)–>完成”。

注意,設定好專案名稱以及專案檔案所在的位置,如下圖示紅處所示:

java呼叫c++介面 第2張

建立好專案之後,將之前生成的HelloWorld_HelloWorld.h標頭檔案新增到專案的“標頭檔案”中,並在原始檔中新增helloworld.cpp這一檔案,如下圖所示:

java呼叫c++介面 第3張

接下來,在helloworld.cpp檔案中輸入以下程式碼:

// helloworld.cpp : 定義DLL應用程式的匯出函式。//#include "stdafx.h"#include "HelloWorld_HelloWorld.h"#include<iostream>using namespace std;JNIEXPORT void JNICALL Java_HelloWorld_HelloWorld_sayHello(JNIEnv *, jobject){    cout << "hello world" << endl;}

右鍵該專案的專案名,選擇“生成”。注意,此時會報錯‘error C1083: 無法開啟包括檔案: “jni.h”: No such file or directory’,解決的辦法是:將你電腦上Java資料夾下,jdk目錄的include目錄下的jni.h檔案(比如,D:Javajdk1.8.0_144include)以及win32目錄下的jni_md.h檔案(比如,D:Javajdk1.8.0_144includewin32)都拷貝到Visual Studiovcinclude目錄下即可解決該問題。然後再次右鍵專案名稱,選擇“生成”。

4、完成以上步驟後

開啟你Visual Studio的C++專案原始檔所在的資料夾(也就是在建立C++專案時你所選擇的“位置”的目錄),將Debug目錄下的dll檔案拷貝到Java資料夾下,jdk目錄的bin目錄中,如下圖所示:

java呼叫c++介面 第4張

5、重新編譯HelloWorld.java程式

最後執行,即可得到Hello World這個結果。

TAG標籤:呼叫 介面 java #