當前位置:首頁 » 編程語言 » java程序調用c

java程序調用c

發布時間: 2024-05-26 14:59:32

java怎麼引用c

Java調用c語言程序時,主要是涉及到操作系統底層的事件。這種時間Java無法處理,例如用戶上傳一個視頻文件,需要後台給視頻加上水印,或者後台分離視頻流和音頻流。只能通過調用C語言處理。
使用Java如何去調用C語言的介面呢?使用Java的JNI技術。
具體調用步驟如下:
1.首先創建Java文件 HelloJni.java ,並創建native方法。
2.編譯Java文件並生成java頭文件。
3.創建C語言文件,HelloWorld.c。
4.生成動態鏈接庫文件 libhello.so。
5.設置動態鏈接庫文件的目錄。
6.把剛才生成的so文件拷貝到/home/lib下,然後執行class文件。

Ⅱ Java客戶端遠程調用C伺服器

真沒有作過相關的開發,Java和C之間相互調用,本地的使用jni或者是直接發送Windows消息;遠程的,都是使用socket通信的。談一些想法,希望能給你些幫助,紙上談兵:
1)現在常用的異構系統之間的調用,採用Web Service的方法,沒做過,但是應該可以。
2)RMI是Java To Java,另外Sun還提供了RMI-IIOP,這個是綜合了RMI和Corba,是可以用在Java和其它語言對象之間的遠程調用,但是我沒有資料,也許你需要看看Corba的基本知識,如何使用idl來定義C對象的介面.
3)我不知道你對C所在的伺服器有什麼要求,是否可以運行Java.如果可以,那麼有一個方法,你可以做一個Java程序來作為RMI的伺服器,然後這個Java程序負責和Java客戶通信,通信的方式還是RMI.然後,在這個Java服務程序中,同過jni的方法調用你的C程序.

Ⅲ 鍐欎竴孌礿ava浠g爜錛岃皟鐢╟紼嬪簭錛岄兘鏈変粈涔堝姙娉

JAVA浠ュ叾璺ㄥ鉤鍙扮殑鐗規ф繁鍙椾漢浠鍠滅埍錛岃屽張姝g敱浜庡畠鐨勮法騫沖彴鐨勭洰鐨勶紝浣垮緱瀹冨拰鏈鍦版満鍣ㄧ殑鍚勭嶅唴閮ㄨ仈緋誨彉寰楀緢灝戱紝綰︽潫浜嗗畠鐨勫姛鑳姐傝В鍐矹AVA瀵規湰鍦版搷浣滅殑涓縐嶆柟娉曞氨鏄疛NI銆

JAVA閫氳繃JNI璋冪敤鏈鍦版柟娉曪紝鑰屾湰鍦版柟娉曟槸浠ュ簱鏂囦歡鐨勫艦寮忓瓨鏀劇殑錛堝湪WINDOWS騫沖彴涓婃槸DLL鏂囦歡褰㈠紡錛屽湪UNIX鏈哄櫒涓婃槸SO鏂囦歡褰㈠紡錛夈傞氳繃璋冪敤鏈鍦扮殑搴撴枃浠剁殑鍐呴儴鏂規硶錛屼嬌JAVA鍙浠ュ疄鐜板拰鏈鍦版満鍣ㄧ殑緔у瘑鑱旂郴錛岃皟鐢ㄧ郴緇熺駭鐨勫悇鎺ュ彛鏂規硶銆

綆鍗曚粙緇嶅強搴旂敤濡備笅錛

涓銆丣AVA涓鎵闇瑕佸仛鐨勫伐浣

鍦↗AVA紼嬪簭涓錛岄栧厛闇瑕佸湪綾諱腑澹版槑鎵璋冪敤鐨勫簱鍚嶇О錛屽備笅錛

static {

System.loadLibrary(鈥済oodluck鈥);

}

鍦ㄨ繖閲岋紝搴撶殑鎵╁睍鍚嶅瓧鍙浠ヤ笉鐢ㄥ啓鍑烘潵錛岀┒絝熸槸DLL榪樻槸SO錛岀敱緋葷粺鑷宸卞垽鏂銆

榪橀渶瑕佸瑰皢瑕佽皟鐢ㄧ殑鏂規硶鍋氭湰鍦板0鏄庯紝鍏抽敭瀛椾負native銆傚苟涓斿彧闇瑕佸0鏄庯紝鑰屼笉闇瑕佸叿浣撳疄鐜般傚備笅錛

public native static void set(int i);

public native static int get();

鐒跺悗緙栬瘧璇JAVA紼嬪簭鏂囦歡錛岀敓鎴怌LASS錛屽啀鐢↗AVAH鍛戒護錛孞NI灝變細鐢熸垚C/C++鐨勫ご鏂囦歡銆

渚嬪傜▼搴弔estdll.java錛屽唴瀹逛負錛

public class testdll

{

static

{

System.loadLibrary("goodluck");

}

public native static int get();

public native static void set(int i);

public static void main(String[] args)

{

testdll test = new testdll();

test.set(10);

System.out.println(test.get());

}

}

鐢╦avac testdll.java緙栬瘧瀹冿紝浼氱敓鎴恡estdll.class銆

鍐嶇敤javah testdll錛屽垯浼氬湪褰撳墠鐩褰曚笅鐢熸垚testdll.h鏂囦歡錛岃繖涓鏂囦歡闇瑕佽獵/C++紼嬪簭璋冪敤鏉ョ敓鎴愭墍闇鐨勫簱鏂囦歡銆

浜屻丆/C++涓鎵闇瑕佸仛鐨勫伐浣

瀵逛簬宸茬敓鎴愮殑.h澶存枃浠訛紝C/C++鎵闇瑕佸仛鐨勶紝灝辨槸鎶婂畠鐨勫悇涓鏂規硶鍏蜂綋鐨勫疄鐜般傜劧鍚庣紪璇戣繛鎺ユ垚搴撴枃浠跺嵆鍙銆傚啀鎶婂簱鏂囦歡鎷瘋礉鍒癑AVA紼嬪簭鐨勮礬寰勪笅闈錛屽氨鍙浠ョ敤JAVA璋冪敤C/C++鎵瀹炵幇鐨勫姛鑳戒簡銆

鎺ヤ笂渚嬪瓙銆傛垜浠鍏堢湅涓涓媡estdll.h鏂囦歡鐨勫唴瀹癸細

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class testdll */

#ifndef _Included_testdll

#define _Included_testdll

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: testdll

* Method: get

* Signature: ()I

*/

JNIEXPORT jint JNICALL Java_testdll_get

(JNIEnv *, jclass);

/*

* Class: testdll

* Method: set

* Signature: (I)V

*/

JNIEXPORT void JNICALL Java_testdll_set

(JNIEnv *, jclass, jint);

#ifdef __cplusplus

}

#endif

#endif

鍦ㄥ叿浣撳疄鐜扮殑鏃跺欙紝鎴戜滑鍙鍏沖績涓や釜鍑芥暟鍘熷瀷

JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass);



JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint);

榪欓噷JNIEXPORT鍜孞NICALL閮芥槸JNI鐨勫叧閿瀛楋紝琛ㄧず姝ゅ嚱鏁版槸瑕佽獼NI璋冪敤鐨勩傝宩int鏄浠JNI涓轟腑浠嬩嬌JAVA鐨剗nt綾誨瀷涓庢湰鍦扮殑int娌熼氱殑涓縐嶇被鍨嬶紝鎴戜滑鍙浠ヨ嗚屼笉瑙侊紝灝卞綋鍋歩nt浣跨敤銆傚嚱鏁扮殑鍚嶇О鏄疛AVA_鍐嶅姞涓妀ava紼嬪簭鐨刾ackage璺寰勫啀鍔犲嚱鏁板悕緇勬垚鐨勩傚弬鏁頒腑錛屾垜浠涔熷彧闇瑕佸叧蹇冨湪JAVA紼嬪簭涓瀛樺湪鐨勫弬鏁幫紝鑷充簬JNIEnv*鍜宩class鎴戜滑涓鑸娌℃湁蹇呰佸幓紕板畠銆

濂斤紝涓嬮潰鎴戜滑鐢╰estdll.cpp鏂囦歡鍏蜂綋瀹炵幇榪欎袱涓鍑芥暟錛

#include "testdll.h"

int i = 0;

JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)

{

return i;

}

JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j)

{

i = j;

}

緙栬瘧榪炴帴鎴愬簱鏂囦歡錛屾湰渚嬫槸鍦╓INDOWS涓嬪仛鐨勶紝鐢熸垚鐨勬槸DLL鏂囦歡銆傚苟涓斿悕縐拌佷笌JAVA涓闇瑕佽皟鐢ㄧ殑涓鑷達紝榪欓噷灝辨槸goodluck.dll

鎶奼oodluck.dll鎷瘋礉鍒皌estdll.class鐨勭洰褰曚笅錛宩ava testdll榪愯屽畠錛屽氨鍙浠ヨ傚療鍒扮粨鏋滀簡銆

Ⅳ 用Java怎麼調用C語言已經編寫好的DLL

1.用System.getProperty("user.dir"),獲取程序的路徑,估計你的應該是 E:\\測試程序不清楚列印一下就可以了。System.getProperty("user.dir") + "\\DLL\\CardAPI"2.unsigned char 用char就可以了unsigned int 用int就可以了,java的int值很大.....C的無符號的記得是65535 unsigned char*、和unsigned int* 這兩個是指針,第一個是取1位地址內容的,第二個根據系統而定,一般是取4位地址值的,用java 的String對應,應該可以 。

Ⅳ 如何用java調用c的編譯器

可以調用的,java有一種技術叫JNI,就是為了調用C/C++,至於例子嘛是這樣的: 01. public class testdll 02. { 03. static 04. { 05. System.loadLibrary("goodluck"); 06. } 07. public native static int get(); 08. 09. public native static void set(int i); 10. public static void main(String args) 11. { 12. testdll test = new testdll(); 13. test.set(10); 14. System.out.println(test.get()); 15. } 16. 17. } 用javac testdll.java編譯它,會生成testdll.class。 再用javah testdll,則會在當前目錄下生成testdll.h文件,這個文件需要被C/C++程序調用來生成所需的庫文件。 二、C/C++中所需要做的工作 對於已生成的.h頭文件,C/C++所需要做的,就是把它的各個方法具體的實現。然後編譯連接成庫文件即可。再把庫文件拷貝到JAVA程序的路徑下面,就可以用JAVA調用C/C++所實現的功能了。 好,下面我們用testdll.cpp文件具體實現這兩個函數: 01. #include "testdll.h" 02. int i = 0; 03. JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass) 04. { 05. return i; 06. } 07. JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j) 08. { 09. i = j; 10. } 編譯連接成庫文件,本例是在WINDOWS下做的,生成的是DLL文件。並且名稱要與JAVA中需要調用的一致,這里就是goodluck.dll http://ask.wangmeng.cn/question/88

Ⅵ Java如何調用C語言代碼

Java Native Interface(JNI)是Java語言的本地編程介面,是J2SDK的一部分。在java程序中,我們可以通過JNI實現一些用java語言不便實現的功能。通常有以下幾種情況我們需要使用JNI來實現。 標準的java類庫沒有提供你的應用程序所需要的功能,通常這些功能是平台相關的 你希望使用一些已經有的類庫或者應用程序,而他們並非用java語言編寫的 程序的某些部分對速度要求比較苛刻,你選擇用匯編或者c語言來實現並在java語言中調用他們 下面我們開始編寫HelloWorld程序,由於涉及到要編寫c/c++代碼因此我們會在開發中使用Microsoft VC++工具。編寫java代碼,我們在硬碟上建立一個hello目錄作為我們的工作目錄,首先我們需要編寫自己的java代碼,在java代碼中我們會聲明native方法,代碼非常簡單。如下所示 class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } } 注意我們的displayHelloWorld()方法的聲明,它有一個關鍵字native,表明這個方法使用java以外的語言實現。方法不包括實現,因為我們要用c/c++語言實現它。注意System.loadLibrary("hello")這句代碼,它是在靜態初始化塊中定義的,系統用來裝載hello共享庫,這就是我們在後面生成的hello.dll(如果在其他的操作系統可能是其他的形式,比如hello.so) 編譯java代碼 javac HelloWorld.java 生成HelloWorld.class文件 創建.h文件 這一步中我們要使用javah命令生成.h文件,這個文件要在後面的c/c++代碼中用到,我們運行 javah HelloWorld。這樣我們可以看到在相同目錄下生成了一個HelloWorld.h文件,文件內容如下 在此我們不對他進行太多的解釋。 /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: HelloWorld * Method: displayHelloWorld * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif 編寫本地實現代碼 在這部分我們要用C/C++語言實現java中定義的方法,我們在VC++中新建一個Project,然後創建一個HelloWorldImp.cpp文件,內容如下 #include <jni.h> #include "HelloWorld.h" #include <stdio.h> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return; } 注意我們這里include了 jni.h和剛才得到的HelloWorld.h文件。因此你要在VC++裡面設置好,jni.h在JAVA_HOME/include裡面。編譯通過後再生成hello.dll文件。 運行java程序 把上面生成的hello.dll文件復制到我們的工作目錄,這時候我們的目錄中包括HelloWorld.java,HelloWorld.class和hello.dll文件。運行java HelloWorld命令,則可在控制台看到Hello world| 的輸出了。運行VC++; 文件---新建---選「win32 console application」(控制台程序)---在右方設置好路徑並輸入工程名---確定 接下來的幾個提示框點確定就行了,那是提示是否要用VC++提供的框架之類的 在左邊的工作空間中選「FILEVIEW」標簽項,點開「+」號,右鍵點擊「SOURCE FILES」,選「添加文件到目錄」,此即添加你要建立的C++源程序文件,會提示你沒有文件,是否添加,你點是,輸入文件名保存就OK了 然後SOURCE FILES下就出現了你剛才建立的*.CPP文件,雙擊,輸入代碼. 以下就是點」組建」菜單中的」編譯」、」組建」等命令進行調試了。 相信你會了。 http://hi..com/%C7%E9%D4%B5and%D3%D1%D2%EA/blog/item/34084645e8560f23cefca3b7.html

熱點內容
移動存儲器是什麼 發布:2024-11-27 10:04:08 瀏覽:876
linux重裝linux 發布:2024-11-27 09:46:25 瀏覽:558
電腦玩雲伺服器 發布:2024-11-27 09:19:22 瀏覽:66
蘋果什麼助手能和安卓互通 發布:2024-11-27 09:18:47 瀏覽:58
android花屏 發布:2024-11-27 09:18:38 瀏覽:125
phpnginx負載均衡 發布:2024-11-27 09:18:36 瀏覽:623
刀片伺服器如何設置網路交換機 發布:2024-11-27 09:17:23 瀏覽:476
eve腳本挖礦 發布:2024-11-27 09:12:25 瀏覽:566
模板平方演算法 發布:2024-11-27 08:56:15 瀏覽:269
系統緩存文件 發布:2024-11-27 08:52:15 瀏覽:914