1. 程式人生 > >Java呼叫c,c++圖解(VS2012實現類庫)

Java呼叫c,c++圖解(VS2012實現類庫)

一,Java部分,建立工程,建立一個類:

public class Huige {
	static {
		System.loadLibrary("HuiHui");
	}

	public native static int hui(int n);

	public static void main(String[] args) {
		int x;
		Huige fhui = new Huige();
		x = fhui.hui(5);
		System.out.println(x);

	}


  1)分別生成Huige.class和 Huige.h檔案

   

 2)開啟Huige.h 檔案,檢視內容如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Huige */

#ifndef _Included_Huige
#define _Included_Huige
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Huige
 * Method:    hui
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_Huige_hui
  (JNIEnv *, jclass, jint);

#ifdef __cplusplus
}
#endif
#endif
二,建立c,c++動態連線庫

1)在Vs2012中建立動態連結庫


2)執行編譯,這時可能會報錯,提示jni.h找不到,需要將jni.h所在的檔案加入到專案的包含目錄中。可以在專案中點右鍵->屬性


3)建立Huige.h檔案,將前面生成的.h檔案內容引進去

4)在Huige.cpp檔案中寫程式碼,c語言實現內容,如下面從0加到n

// HuiHui.cpp : 定義 DLL 應用程式的匯出函式。
//

#include "stdafx.h"
#include "Huige.h"
JNIEXPORT jint JNICALL Java_Huige_hui
  (JNIEnv *, jclass, jint n){
	  int x=0;
	  for(int i=0;i<n;i++){
		  x+=i;
	  }
	  return x;
}

5)重現生成後,找到Huige.dll檔案,將其和Huige.class檔案放入jak的bin下,執行。



相關推薦

Java呼叫cc++圖解VS2012實現

一,Java部分,建立工程,建立一個類: public class Huige { static { System.loadLibrary("HuiHui"); } public native static int hui(int n); public st

C++ using關鍵字作用 過載父函式

1.在當前檔案中引入名稱空間 這是我們最熟悉的用法,例如:using namespace std; 2.在子類中使用 using 宣告引入基類成員名稱(參見C++ primer) 在private或者protected繼承時,基類成員的訪問級別在派生類中更受限:

正則表達式JavaC#C++

matcher expr com mar mat c# ever arr reac Java import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern;

hdu 2015 偶數求和陣列呼叫函式c語言

hdu 2015 偶數求和 點選做題網站連結 題目描述 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 有一個長度為n

hdu 2014 青年歌手大獎賽_評委會打分陣列呼叫函式c語言

hdu 2014 青年歌手大獎賽_評委會打分 點選做題網站連結 題目描述 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Descriptio

CC++C#Java?這些有什麼區別?

C語言: 目前最著名、最有影響、應用最廣泛的windows、linux和UNIX三個作業系統都是用C語言編寫的。0S是計算機系統(由軟硬體兩個子系統構成)的核心和靈魂,它是軟體中最龐大最複雜的系統軟體。既然如此龐大複雜的0S都可以用c語言編寫,從狹義而言,還有什麼系統軟體和應用軟體不能用c語言編

轉載 -- 如何設計一門語言——exception和error code cc++ 還沒看

如何設計一門語言(六)——exception和error code http://www.cppblog.com/vczh/archive/2013/06/10/200920.html   如何設計一門語言(六)——exception和error code 我一直以來對於e

Python、Java 薪資最高C# 墊底:分析什麼程式語言最賺錢!

本文主要用Python爬取拉勾網不同程式語言職位資訊,包括Python崗、Java崗、C++崗、PHP崗、C#崗位(5崗),再用R語言對影響薪資的因素進行分析。由於拉勾網的職位資訊只顯示30頁,一頁15個職位資訊,如果單獨爬取一個城市的崗位資訊,只有幾頁是匹配的資訊,資訊量太小,分析沒有說服力。因此,本文爬取

Java呼叫REST API介面例項getpost方法

public class RestUtil { //get public void getMethod(String url) throws IOException { URL restURL = new URL(url); HttpURLConn

c++11 條款22:當使用Pimpl指向實現的指標實現檔案裡定義特定的成員函式

條款22:當使用Pimpl(指向實現的指標)時,在實現檔案裡定義特定的成員函式         假如你曾經和過多的編譯構建時間抗爭過,你應該熟悉Pimpl(指向實現的指標)這個術語。這項技術是你可以把類的資料成員替換成一個指向實現類(結構)的指標,把原來在主類中的資料成員

這段代碼c 1秒java 9秒c# 14秒而python。。。

寫代碼 clu read art con code 身後 and 應用程序 哎,不得不說最近見得鍵盤俠客太多了,做程序員沒兩天總是喜歡上嘴唇觸天,下嘴唇碰地的吹。 自己分明都沒用過幾門語言,就對各門語言評頭論足說三道四,這麽語言多好那門語言有多爛。 可能是隨著時間也變得沒那

Matlab安裝MinGW-w64實現cc++以及fortran編譯親測有效

    matlab固然強大,其中的simulink更是理工科模擬、建模研究中不可缺少的工具,一般而言matlab/simulink能滿足多數使用要求,但是往往在研究中會使用User-difinition s-function或者呼叫c,c++的庫函式,這時候就需要matla

C語言 Include指令引用頭文件

clas fff const con ack style span pan har #include "one.h" #include "two.h" int main(int argc, const char * argv[]) { one(

詳解C# Tuple VS ValueTuple元組 VS 值元組

edit 成員 擴展 ati art info ets 簡單 ole C# 7.0已經出來一段時間了,大家都知道新特性裏面有個對元組的優化,並且網上也有大量的介紹,這裏利用詳盡的例子詳解Tuple VS ValueTuple(元組類VS值元組),10分鐘讓你更了解Value

c++ 設計模式8 Factory Method 工廠方法

更改 itl logs 客戶 eos image 分享 一個 工廠方法模式 5. “對象創建”類模式 通過“對象創建”類模式繞開new,來避免對象創建(new)過程中所導致的緊耦合(依賴具體類),從而支持對象創建的穩定。它是接口抽象之後的第一步工作。 5.1 工廠方法 動機

Json.net實現方便的Json轉C#dynamic動態對象

bar 方便 api lba c# oid tool 可能 情況 以前需要將一段json字符串轉換為C#對象時,一般都是定義一個與之對應的實體類來接收。這樣做有一個很大的缺點,就是當字符串特別長,屬性特別多,又有嵌套時,手敲這個實體類就非常痛苦。 比如之前做的一個接收百度七

關於C語言中的Complex復數和imaginary虛數

http 個人 time 編譯 pop oat float environ real 關於C語言中的Complex(復數類型)和imaginary(虛數類型) 其實這裏的復數complex就是數學裏的復數,包含實部和虛部兩個部分,比如:x=2.1+6i,下面進行詳細介紹

CC++輸入輸出

函數功能 oid 輸入 缺省 char void sin 溢出 urn C語言: 1. scanf printf %c %s %d %lld scanf %s 遇見“ ”或者回車等就結束 scanf %c 可以讀取空格; 2. ge

C# :base的用法冒號後面的base

new class pan client isp obj logs 重寫 http c# 中關於: base()用法,在此記錄一下,方便查閱 1.this是標識當前資源對象的,而base是基於父級的。 2.base發揮了期靈魂級的作用——多態 3.base子類可以訪

SwiftObjective-CCC++混合編程

cti obj 文件中 執行 head swift項目 引入 xcode 頭文件 (1)Swift與C語言通信 在xcode中,當在Swift項目裏添加C語言文件是,xcode會詢問是否Create Bridging Header,選擇是。 然後在Bridging Head