當前位置:首頁 » 編程軟體 » c與java混合編程

c與java混合編程

發布時間: 2023-02-08 12:37:22

⑴ 如何在C++和java之間互相調用

java 與 C++ 兩種編程語言,它們之間的相互調用:
1、java 調用C++編寫的dll,可使用JNI 或 Jawin 開源項目(推薦第二種方法)。
2、C++ 調用java 的變數、方法,通過JNI (Java Native Interface)與java類交互。

----操作步驟(只總結第二個)-----
(1) vc6.0編譯C++程序,開發環境設置:工具--》選項--》工具,工具標簽下:選擇「include files」,加入頭文件目錄:C:\Program Files\Java\jdk1.5.0\include 和 C:\Program Files\Java\jdk1.5.0\include\win32 ;選擇「Libary files"下,加入LIB目錄:C:\Program Files\Java\jdk1.5.0\lib 。會編譯成exe文件。
執行程序環境設置: Path環境變數加入:C:\Program Files\Java\jdk1.5.0\jre\bin\client (jvm.dll所在目錄),若不加入path會提示,執行時找不到jvm.dll.

(2)GetStaticMethodID(cls,"main","([Ljava/lang/String;)V");
//([Ljava/lang/String;)V 是main()簽名
在java程序目錄下執行:javap -s -p ClassDemo (注:ClassDemo.java 已經編譯)
取main 下面的語句 :: Signature: ([Ljava/lang/String;)V

(3)附代碼示例:

java程序
import java.io.*;
public class DemoMain{
public static void main(String[] args) throws java.io.IOException, java.lang.NullPointerException
{
System.out.println("This is a test.");
}
}

C++程序:
#ifndef __cplusplus
#define __cplusplus
#endif
#include "jni.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma comment (lib,"C:\\Program Files\\Java\\jdk1.5.0\\lib\\jvm.lib") // 動態調用lib
#pragma warning(disable: 4129) // 關閉 warning, 4129
void main() {
LoadLibrary("C:\\Program Files\\Java\jre1.5.0\\bin\\client\\jvm.dll"); // 動態調用dll
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.classpath=.";
options[2].optionString = "-verbose:jni";
vm_args.version = JNI_VERSION_1_4;
vm_args.nOptions = 3;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); // 創建虛擬機
if (res < 0) {
fprintf(stderr, "Can't create Java VM\n");
exit(1);
};
jclass cls = env->FindClass("DemoMain");
if (cls == 0) printf("Sorry, I can't find the class");
fprintf(stdout, "This is invokeSimplified4.\n");
jmethodID get_main_id;
if(cls != NULL)
{
get_main_id =env->GetStaticMethodID(cls,"main","([Ljava/lang/String;)V");
fprintf(stdout, "This is invokeSimplified5.\n");
if(get_main_id != NULL )
{
jclass string = env->FindClass("java/lang/String");
jobjectArray args = env->NewObjectArray(0,string, NULL);
fprintf(stdout, "This is invokeSimplified6.\n");
int i = env->CallIntMethod(cls, get_main_id, args);
fprintf(stdout, i+ "This is invokeSimplified7.\n");
}
}
jvm->DestroyJavaVM();
fprintf(stdout, "Java VM destory\n");
}

⑵ 我是個門外漢,請問C++和JAVA可以一起學嗎

建議不要混在一起學,Java不是C家族成員。原因如下:

1)可以先學C++後再學Java,有C++的指針,面向對象基礎作鋪墊,再學Java或其它任何一門語言會有事半功倍效果;

2)正如前面所說,Java不是C家族的成員,例如,在面向對象這塊至少在一些語法層面上,你會發現Java的語法是很惡心的。如B類需要繼承A類:

Java會這樣寫

classA{

}

classBextendsA{

}

C++這樣寫(C家族)

classA{

};

classB:A{

};

C#這樣寫(C家族)

classA{

}

classB:A{

}

再比如,在Java里,類變數,類方法,不僅可以用類名去調用,甚至還可以用對象名去調用,而在C家族裡是不允許的。

再比如,在Java里定義類的成員時,若不加訪問修飾符時,默認訪問級別是本包任何地方均可以訪問,而C家族默認是私有的,即類體內部可訪問。

當然還有很多差異...

⑶ C# 和java 可以放在一起編程嗎、

圖書管理系統 是C/S模式 還是B/S模式?
B/S模式 就是網站的話 兩個人各開發某些部分 然後 兩個都運行起來
C/S模式 就是桌面程序的話 兩個開發之後 相互之間用外部調用
這個是不是辦法的辦法
最好是其中一個自學
JAVA的同學學習.NET的話 會很快上手。 我是這么學過來的。

⑷ java和c語言能混合編程嗎。

通過JNI,Java中的native方法,就是調用C/C++寫的函數

⑸ Java 和C語言同時學可以嗎

個人意見
相同點:他們都是高級語言,都需要對電腦的基礎知識的了解
不同點:C是屬於底層開發,是高級語言但是又具有操作硬體的特點,所以學起來比較困難,如果想學好必須先知道計算機的內存工作原理比較好!要麼就是花很多時間積累經驗(就算是不知道內部原理但是會用就OK了)
JAVA是屬於面向對象的,簡單的說就是 它的數據對象具有 封裝、集成性等特點。但是相對比較簡單,涉及的底層東西比較少!比C++容易多了!個人意見!
如果兩者同時學未免都學不好,倒是建議樓主可以有所側重,主要學C然後兼顧了解JAVA未免不可!到時候等C學成時候,再返回來攻JAVA倒是上上選!
當然了,如果樓主又足夠的時間的話(假設你是一名在校學生),那就另當別論了!想怎麼學就怎麼學!

⑹ 如何在C++和java之間互相調用

在JAVA中調用C++的基本步驟
(1)、編寫帶有native方法的java類
(2)、使用javac命令編譯所編寫的java類
(3)、使用javah命令處理類文件,生成C/C++頭文件
(4)、使用C/C++實現本地方法
(5)、將C/C++編寫的文件生成動態連接庫
(6)把生成的.dll庫放到c:/windows/system32目錄下

⑺ 如何為一個用C語言編寫的程序加上一個用Java編寫的界面

1、編寫java程序jcall.java,如下:
public class jcall
{
static
{
System.loadLibrary("jcallc.dll");
}

public native static int test(int i);

public static void main(String[] args)
{
jcall jc = new jcall();
int i;
i = jc.test(4);
System.out.println(i);
}
}

2、編譯java
javac jcall.java
4、生成頭文件
javah jcall
生成jcall.h文件
5、製作VC動態庫
建立DLL工程,程序添加:
#include "jcall.h"
JNIEXPORT jint JNICALL Java_jcall_test (JNIEnv *, jclass, jint p)
{
int j = p*2;
return j;

將jcall.h jni.h復制到VC工程目錄,然後編譯。
6、java調用
將jcallc.dll文件復制到jcall.java的目錄中,運行
java jcall,就可以得到運行結果。

⑻ JAVA和C語言可以共同開發某個應用軟體嗎

這個是可以的,因為有混合編程這個概念的,兩者只要環境在就可以了,程序就是為實現功能的。

⑼ 如何在java中實現c語言中的聯合的功能

用類, 只有這樣。
class DateE{
long ul[2];
int ui[4];
byte uc[8];

//get/set方法

}

java沒有 unsigned long,如果數很大就換成BigDecimal
,或 BigInteger

⑽ java和C#能否混合編程

請問你這樣的代碼用什麼編譯器來編譯啊?明顯是不行的啊!不過你可以用多文件調用的方式來搞。單一文件是肯定不行的

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:750
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1012
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:719
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:879
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1127
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:351
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:229
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:911
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:876